hdu 4514腾讯马拉松3月22 湫湫系列故事——设计风景线

实在是水,一开始以为最短路算法,想了想没想明白。后来比赛结束看到有人用并查集。。我真是水啊。。。

题意:n点m边,有环输出YES,无环输出最长距离。

两种情况:

 1 找uv的根节点,一样的话代表有环

 2 uv根节点不一样的话 x为u的根节点,y为v的根节点,lenth[x]+=lenth[y]+w;

#include<stdio.h>
#include<string.h>
int pre[111111],lenth[111111];
int m,n;
int find(int root){
	int w=root;
	while(pre[root]!=-1){
		root=pre[root];
	}
	while(w!=root){
		int it=pre[w];
		pre[w]=root;
		w=it;
	}
	return root;
}
int main(){
	while(scanf("%d%d",&n,&m)!=EOF){
		memset(pre,-1,sizeof(pre));
		int flag=0,max=0;
		for(int i=1;i<=m;i++){
			int u,v,w;
			scanf("%d%d%d",&u,&v,&w);
			if(flag==0){
				int x,y;
				x=find(u),y=find(v);
				if(x==y){
					printf("YES\n");
					flag=1;
				}
				else{
					lenth[x]+=lenth[y]+w;
					if(lenth[x]>max){
						max=lenth[x];
					}
					pre[y]=x;
				}
			}
		}
		if(flag==0)
			printf("%d\n",max);
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值