#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;
}
uva10158(War)并查集
最新推荐文章于 2020-02-07 11:05:28 发布