hdu 1829(带权并查集)
2017-10-13 11:13
239 查看
传送门
题解:并查集维护0/1权值。
题解:并查集维护0/1权值。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int MAXN=2004; int n,m; int fa[MAXN]; bool val[MAXN]; inline int read() { int x=0;char c=getchar(); while (c<'0'||c>'9') c=getchar(); while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x; } int find(int x) { if (x==fa[x]) return x; int t=fa[x]; fa[x]=find(fa[x]); val[x]=(val[x]+val[t])&1; return fa[x]; } inline void merge(int x,int y,int fx,int fy) { fa[fy]=fx; val[fy]=(val[x]-val[y]+1)&1; } int main() { // freopen("hdu 1829.in","r",stdin); int kase=read(); for (int kas=1;kas<=kase;++kas) { bool sus=false; printf("Scenario #%d:\n",kas); n=read(),m=read(); for (int i=1;i<=n;++i) fa[i]=i,val[i]=0; for (register int i=0;i<m;++i) { int x=read(),y=read(); if (sus) continue; int fx=find(x),fy=find(y); if (fx==fy) { if (val[x]==val[y]) { sus=true; } } else merge(x,y,fx,fy); } puts(sus?"Suspicious bugs found!\n":"No suspicious bugs found!\n"); } return 0; }
相关文章推荐
- hdu 1829 A Bug's Life 并查集
- HDU 1829 & POJ 2492 A Bug's Life (并查集)
- HDU 1829 并查集
- HDU 1829 A Bug's Life (分组并查集)
- hdu 1829 (并查集)
- hdu - 1829 A Bug's Life (并查集)&&poj - 2492 A Bug's Life && poj 1703 Find them, Catch them
- HDU 1829 A Bug's Life(基础种类并查集)
- HDU 1829 A Bug's Life(带关系的并查集)
- HDU 1829 A Bug's Life(并查集的应用)
- hdu 1829 并查集
- HDU 1829 A Bug's Life 带权并查集
- HDU 1829 A Bug's Life-基础种类并查集
- HDU_1829 A Bug's Life [ 向量+并查集]
- HDU 1829 A Bug's Life (并查集)
- HDU 1829 A Bug's Life(种类并查集)
- HDU-1829 A Bug's Life(并查集)
- HDU 1829 A Bug's Life(种类并查集)
- POJ 2492/hdu 1829 A Bug's Life【带权并查集】
- POJ 2492 || HDU 1829:A Bug's Life(并查集)
- HDU-1829 A Bug's Life。并查集构造,与POJ1709异曲同工!