树的专题整理(二)

树的专题整理(二)

大家好,又见面了,我是全栈君。

    

 这一篇博客继续以一些OJ上的题目为载体,对树专题进行整理整理一下。

会陆续的更新。。。

这是树的专题整理的第二篇博客,假设第一篇博客的地址在:http://blog.csdn.net/hjd_love_zzt/article/details/29401743


例题:

1、POJ 2485

题目与分析:

这道题抽象一下:“是求最小生成树的最大边”


2)使用kruscal算法来解决

/*
 * POJ_2485_kruscal.cpp
 *
 *  Created on: 2014年6月11日
 *      Author: Administrator
 */

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

const int maxn = 505;
const int maxm = maxn*maxn;
const int inf = 9999999;

int map[maxn][maxn];
int father[maxn];
int find(int x) {
	if (x == father[x]) {
		return x;
	}

	father[x] = find(father[x]);
	return father[x];
}

void merge(int x, int y) {
	int fx = find(x);
	int fy = find(y);

	if (fx != fy) {
		father[fx] = fy;
	}
}


struct Edge{
	int begin;
	int end;
	int weight;
	int selected;
}edge[maxm];

bool cmp(Edge a,Edge b){
	if(a.weight != b.weight){
		return a.weight < b.weight;
	}

	if(a.begin < b.begin){
		return a.begin < b.begin;
	}

	return a.end < b.end;
}

int n,m;

int maxe;

int kruscal(){
	int sum = 0;

	int i;
	for(i = 1 ; i <= n ; ++i){
		father[i] = i;
	}

	sort(edge+1,edge+1+m,cmp);

	int k = 0;
	for(i = 1 ; i <= m ; ++i){
		if( k == n-1){
			break;
		}

		int x = find(edge[i].begin);
		int y = find(edge[i].end);
		if(x != y){
			merge(x,y);
			k++;
			edge[i].selected = true;

			sum += edge[i].weight;

			maxe = edge[i].weight;//用来记录最下生成树中当前的最大边
		}
	}

	return sum;
}


int main(){
	int t;
	scanf("%d",&t);

	while(t--){
		scanf("%d",&n);
		m = 1;

		int i;
		int j;
		for(i = 1 ; i <= n ; ++i){
			for(j = 1 ; j <= n ; ++j){
				scanf("%d",&map[i][j]);
			}
		}


		for(i = 1 ; i <= n ; ++i){
			for(j = i+1; j <= n ; ++j){
				edge[m].begin = i;
				edge[m].end = j;
				edge[m].weight = map[i][j];
				edge[m++].selected = false;
			}
		}

		kruscal();



		printf("%d\n",maxe);

	}

	return 0;
}












版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115547.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月2日 下午9:00
下一篇 2022年2月2日 下午10:00


相关推荐

  • linux下elasticsearch 安装、配置及示例「建议收藏」

    linux下elasticsearch 安装、配置及示例「建议收藏」简介开始学es,我习惯边学边记,总结出现的问题和解决方法。本文是在两台linux虚拟机下,安装了三个节点。本次搭建es同时实践了两种模式——单机模式和分布式模式。条件允许的话,可以在多台机器上配置es节点,如果你机器性能有限,那么可以在一台虚拟机上完成多节点的配置。如图,是本次3个节点的分布。hostnameIPes节点master192.168.137.100

    2022年6月16日
    37
  • java反射 getMethod_JAVA 反射 getMethod() 和 invoke() 具体应用[通俗易懂]

    java反射 getMethod_JAVA 反射 getMethod() 和 invoke() 具体应用[通俗易懂]最近有一个有很多输入框的JSP页面,在页面上inputname都是有规律的命名,在提交到后台时,通过JAVA反射机制可以减少不少代码量,特此记录一下实现!JSP页面大概如下:全程陪诊后续价格:V2普通会员元V2银牌会员元V2金牌会员元V2钻石会员元V3普通会员元V3直通会员元V3专护会员元V3专家会员元全程陪检后续价格:V2普通会员元V2银牌会员元V2金牌会员元V2钻石…

    2026年2月20日
    5
  • 多Agent协作框架的设计与实现

    多Agent协作框架的设计与实现

    2026年3月14日
    1
  • ArcGIS线转面

    ArcGIS线转面nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 1 打开 ArcMap 用 AddData 加载 shpPolyline 线文件 br nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 2 选 Editor 编辑 StartEditing 开始编辑 br nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 3 选 Editor 编辑 MoreEditingT Topology 拓扑 br nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 4 在 Topology 拓扑工具栏中选 MapTopology 再在 Shp 文件上打勾 Okbr nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 5 用 SelectFeatur

    2026年3月26日
    1
  • 把AutoEventWireup属性关闭

    把AutoEventWireup属性关闭1、关于AutoEventWireup属性的作用:,自动关联页面的Page_Load、Page_Init事件,好处就是不用再多写委托代码或重载代码了啦,坏处就是性能(听说的)和不直观性(影响菜鸟升级,“没见到事件关联它为什么会执行这段代码呢?”)。2、删除:(1)、在aspx页面一个个将“AutoEventWireup=true”改为“AutoEventWireup=false”了

    2022年5月28日
    38
  • 对asterisk的一些研究

    对asterisk的一些研究

    2021年5月7日
    173

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号