欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > A bug‘s life 虫子的生活(带权并查集)

A bug‘s life 虫子的生活(带权并查集)

2024/10/24 22:28:15 来源:https://blog.csdn.net/zht2002/article/details/139893082  浏览:    关键词:A bug‘s life 虫子的生活(带权并查集)

题目链接: 2492 -- A Bug's Life (poj.org)

题目描述:

思路: 带权并查集,处理方法基本与食物链(http://t.csdnimg.cn/fSnRr)相同,没什么思维创新

但是一开始WA了几次,有些细节没有注意好,还是需要静下心来,好好分析问题,需要警惕!

参考代码:

//#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2010;
int fa[N];
int dis[N];
int t,n,m;
void init(){for(int i=1;i<=n;i++){fa[i]=i;dis[i]=0;}return ;
}int finds(int x){if(fa[x]==x) return x;int res=finds(fa[x]);dis[x]+=dis[fa[x]];dis[x]%=2;fa[x]=res;return res;
}void unions(int x,int y){int u=finds(x);int v=finds(y);if(u==v) return ;fa[u]=v;dis[u]=1+dis[x]+dis[y];dis[u]%=2;return ;
}int main(void){scanf("%d",&t);int g=0;while(t--){scanf("%d%d",&n,&m);init();g++;printf("Scenario #%d:\n",g);int flag=0;for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);if(flag) continue;int u=finds(x);int v=finds(y);if(u==v){int res=(dis[x]+dis[y]+2)%2;if(res!=1) flag=1;}else unions(x,y);}if(flag){printf("Suspicious bugs found!\n");}else printf("No suspicious bugs found!\n");if(t) printf("\n");}return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com