记录编号 227088 评测结果 AAAAAAAAAA
题目名称 [福州培训2010] 修复公路 最终得分 100
用户昵称 Gravatar水墨青花 是否通过 通过
代码语言 C++ 运行时间 0.564 s
提交时间 2016-02-18 14:56:15 内存使用 0.44 MiB
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>

using namespace std;

struct EDGE 
{
	int s;//start
	int e;//end
	int w;
}e[100001];

void Kruskal();
int Findroot(int);
void Union(int,int);
int comp(const struct EDGE& a,const struct EDGE& b)
{
	return a.w<b.w;
}

int n,m;
int father[1001];
int total=0;

int main()
{
	freopen("roada.in","r",stdin);
	freopen("roada.out","w",stdout);		
	
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		father[i]=i;
	}
	
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&e[i].s,&e[i].e,&e[i].w);
	}
	sort(e+1,e+1+m,comp);
	for(int i=1;i<=m;i++)
	{
	//	cout<<e[i].w<<"aaa"<<endl;
	}
	
	Kruskal();
	
	for(int i=1;i<=n-1;i++)
	{
		if(Findroot(i)!=Findroot(i+1))
		{
			printf("%d",-1);
			return 0;
		}
	}
	
	printf("%d",total);
	
	fclose(stdin);
	fclose(stdout);
	return 0;	
}

void Kruskal()
{
	for(int i=1;i<=m;i++)
	{
		if(Findroot(e[i].s)!=Findroot(e[i].e))
		{
			total=e[i].w;
	//		cout<<e[i].s<<' '<<e[i].e<<' '<<e[i].w<<endl;
	//		cout<<father[e[i].s]<<' '<<father[e[i].e]<<endl<<endl;
			Union(Findroot(e[i].s),Findroot(e[i].e));
		}
		else
		{
			continue;
		}
		
	}
}

void Union(int x,int y)
{
	father[x]=y;
}

int Findroot(int x)
{
	if(father[x]!=x)
	{
		father[x]=Findroot(father[x]);
	}
	return father[x];
}