UVa 10158 并查集+位操作
来源:互联网 发布:高中背英语单词软件 编辑:程序博客网 时间:2024/06/04 01:36
两种代码,感觉都挺好玩的,有兴趣的可以多看看
#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn=1e4+5;int par[maxn],val[maxn],n;void init(){ for(int i=0;i<n;i++) { par[i]=i; val[i]=0; }}int find(int num,int &rel){ if(par[num]==num) { rel=0; return num; } int relx,fa; fa=find(par[num],relx); val[num]=val[num]^relx; par[num]=fa; rel=val[num]; return fa;}void setfriends(int x,int y){ int rel,relx,rely,fa,fb;; fa=find(x,relx); fb=find(y,rely); if((fa==fb)&&(relx^rely)) { printf("-1\n"); return; } else if(fa!=fb) { par[fa]=fb; val[fa]=relx^rely; }}void setenemies(int x,int y){ int rel,relx,rely,fa,fb; fa=find(x,relx); fb=find(y,rely); if((fa==fb)&&(relx^rely^1)) { printf("-1\n"); return; } else if(fa!=fb) { par[fa]=fb; val[fa]=relx^rely^1; }}int main(){ scanf("%d",&n); init(); int c,x,y; while(scanf("%d%d%d",&c,&x,&y)!=EOF&&(c||x||y)) { switch(c) { case 1: setfriends(x,y);break; case 2: setenemies(x,y);break; default: int tp1,tp2; if(find(x,tp1)!=find(y,tp2)) printf("0\n"); else printf("%d\n",tp1^tp2^(c&1)); } } return 0;}
#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn=2*1e4+5;int par[maxn],n;void init(){ for(int i=0;i<2*n;i++) par[i]=-1;}int find(int num){ if(par[num]<0) return num; return par[num]=find(par[num]);}void setfriends(int x,int y){ int fa,fb;; if(find(x)==find(y+n)) { printf("-1\n"); return; } if(find(x)!=find(y)) { par[find(x)]=find(y); par[find(x+n)]=find(y+n); }}void setenemies(int x,int y){ int fa,fb;; if(find(x)==find(y)) { printf("-1\n"); return; } if(find(x)!=find(y+n)) { par[find(x)]=find(y+n); par[find(x+n)]=find(y); }}int main(){ scanf("%d",&n); init(); int c,x,y; while(scanf("%d%d%d",&c,&x,&y)!=EOF&&(c||x||y)) { switch(c) { case 1: setfriends(x,y);break; case 2: setenemies(x,y);break; default: if(find(x)!=find(y)&&find(x+n)!=find(y)) printf("0\n"); else printf("%d\n",(find(x)!=find(y))^(c&1)); } } return 0;}
0 0
- UVa 10158 并查集+位操作
- UVA -2232(并查集 + 位运算)
- uva 10158(并查集)
- uva 10158 - War(并查集)
- UVA 10158 - War(并查集)
- UVa 10158 War / 并查集
- UVA 10158 War(并查集)
- War - UVa 10158 并查集
- UVA 10158 War (并查集)
- uva 10158 War (并查集)
- UVA---10158-War(并查集)
- UVA 10158 War 并查集
- 数据结构 并查集 UVA 10158
- UVa - 10158 - War ( 并查集 )
- uva 793 并查集
- uva 11503 并查集
- uva 11987 并查集
- Friends+uva+并查集
- HBuilder如何与服务器上传代码
- Web Cache的实现
- 常用Sqlite语句
- SQL字符串处理函数大全
- Python 发个小邮件吧!
- UVa 10158 并查集+位操作
- opencv初识(一)
- QT 资料下载集合
- LeetCode(135)Candy
- 详解Handler机制和模拟Hangler
- 11.24 作业 Problem C: 平均数在哪儿?
- 欢迎使用CSDN-markdown编辑器
- Android开发学习笔记:浅谈WebView
- 简单的GreendaoDemo操作进行增删该查