gfoj 小电视的运输网络

题目:http://www.gdfzoj.com/oj/contest/276/problems/1

bilibili拜年祭上,小妹妹被邪♂恶的组织带♂走的事情,引发了22和33的关注。她们现在关心着平静之下暗流涌动的小电视们。

在邪♂恶组织地盘上传播小电视会有一定的风险,现在22和33希望能在邪♂恶组织地盘上尽可能安全地传播小电视,来保护 ' knows nothing about *♂* ' 的孩子们。

22和33希望知道在小电视能传播到任何一个地区的基础上,并且尽可能安全的情况下,传播小电视最危险的道路的危险值是多少。如果不是太危险,22和33就去旅游了~

Input

第一行有 n , m 两个正整数 ( 1<n<=100000 , m<=200000 ) 表示邪♂恶组织地盘数和道路数

接下来的 m 行,每行有3个正整数 a , b , c ( a , b<=n )

a,b 表示道路所连通的地区,c 表示该道路危险值,越大代表越危险

由于邪♂恶组织道路比较邪♂恶,所以只能保证道路可以使任意两城市互达(道路是无向的)

Output

输出一个正整数,表示在小电视能传播到任何一个地区的基础上,并且尽可能安全的情况下,传播小电视最危险的道路的危险值是多少

Sample Input

2 1

1 2 233

Sample Output

233

 

又一个坑爹样例。。。

题目求的是最大边权的最小值,不是和!!!

#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

struct node
{
	int u,v,w;
};

const int maxS=200000;
node edge[maxS+5];
int n,m,ans=0;
int a[maxS+5];

bool cmp(node x,node y)
{
	return x.w<y.w;
}

int find(int x)
{
	int x1,fu;
	
	if (a[x]==x)
		return x;
	else
		fu=x;
	while (fu!=a[fu])
		fu=a[fu];
	while (fu!=x)
	{
		x1=a[x];
		a[x]=fu;
		x=x1;
	}
	return fu;
}

void kruskal()
{
	int i=1,tot=1,x,y,fx,fy;
	
	while (tot<n)
	{
		x=edge[i].u;	y=edge[i].v;
		fx=find(x);	fy=find(y);
		if (fx!=fy)
		{
			a[fx]=fy;
			tot++;
		}
		i++;
	}
	printf("%d\n",edge[i-1].w);
}

int main()
{
	int i;
	
	freopen("a.txt","r",stdin);
	scanf("%d%d",&n,&m);
	for (i=1;i<=n;i++)
		a[i]=i;
	for (i=1;i<=m;i++)
		scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
	sort(edge+1,edge+m+1,cmp);
	
	kruskal();
	
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值