Luogu P2330 繁忙的都市

Luogu P2330 繁忙的都市

裸的最小生成树。
当然,一定要注意它让你输出什么。

#include<bits/stdc++.h>
#define N 100010

using namespace std;

int n,m,cnt,s,mmax;
int fa[N];

struct node {
	int frm,to,w;
}e[N];

void addEdge(int u,int v,int w) {
	e[++cnt]=(node){u,v,w};
	return;
}

void Read() {
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++) {
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		addEdge(u,v,w);
	}
	return;
}

bool cmp(node a,node b) {
	return a.w<b.w;
}

void Init() {
	for(int i=1;i<=n;i++) {
		fa[i]=i;
	}
	return;
}

int Find(int x) {
	return fa[x]==x?x:fa[x]=Find(fa[x]);
}

bool Judge(int x,int y) {
	if(Find(x)==Find(y)) {
		return false;
	}
	else {
		return true;
	}
}

void Merge(int x,int y) {
	fa[Find(y)]=fa[Find(x)];
	return;
}

void Kruskal() {
	sort(e+1,e+cnt+1,cmp);
	for(int i=1;i<=cnt;i++) {
		if(Judge(e[i].frm,e[i].to)) {
			s++;
			mmax=max(mmax,e[i].w);
			Merge(e[i].frm,e[i].to);
		}
		if(s==n-1) {
			break;
		}
	}
	printf("%d %d",s,mmax);
	return;
}

int main()
{
	Read();
	Init();
	Kruskal();
	return 0;
}
posted @ 2019-09-15 12:32  WalkerV  阅读(133)  评论(0编辑  收藏  举报