uva10158(War)并查集

来源:互联网 发布:北京算法工程师招聘 编辑:程序博客网 时间:2024/05/18 02:06
#include<iostream>using namespace std;int f[20005];int n;int find(int x){return f[x]==x?x:f[x]=find(f[x]);}int areFriends(int x,int y){if(find(x)!=find(y)&&find(x)!=find(y+n)) return -1;if(find(x)==find(y)) return 1;if(find(x)!=find(y)) return 0;}int areEnemies(int x,int y){if(find(x)!=find(y)&&find(x)!=find(y+n)) return -1;if(find(x)!=find(y)) return 1;if(find(x)==find(y)) return 0;}int main(){int t,x,y;cin>>n;for(int i=1;i<=2*n;i++)f[i]=i;cin>>t>>x>>y;while(t||x||y){if(t==1) {if(areFriends(x,y)==0) cout<<"-1"<<endl;if(areFriends(x,y)==-1){f[find(x)]=find(y);f[find(x+n)]=find(y+n);}}if(t==2){if(areEnemies(x,y)==0) cout<<"-1"<<endl;if(areEnemies(x,y)==-1){f[find(x+n)]=find(y);f[find(x)]=find(y+n);}}if(t==3){if(areFriends(x,y)==1) cout<<"1"<<endl;else cout<<"0"<<endl;}if(t==4){if(areEnemies(x,y)==1) cout<<"1"<<endl;else cout<<"0"<<endl;}cin>>t>>x>>y;}return 0;}

原创粉丝点击