poj1073
来源:互联网 发布:python的set函数 编辑:程序博客网 时间:2024/06/04 19:26
//一道变种的并查集的题目,第一次遇到这种题,学习一下。以防以后再遇到这种题。
//另外,注意,在poj上交用cin,cout超时。
//另外,注意,在poj上交用cin,cout超时。
#include<iostream>#define Max 100000using namespace std;int father[200001];int peple;void Init(){ int i; for(i = 1;i <= Max + peple;i++) { father[i] = i; }}int getfather(int x){ if(x == father[x]) return x; return father[x] = getfather(father[x]);}void Unio(int x,int y){ int fx,fy; fx = getfather(x); fy = getfather(y); if(fx == fy) return; else father[fx] = fy;}int main(){ int n,i,j; char c; int message; int first,second; //cin>>n; scanf("%d",&n); for(i = 1;i <= n;i++) { // cin>>peple>>message; scanf("%d%d",&peple,&message); Init();//初始化 for(j = 1;j <= message;j++) { //cin>>c>>first>>second; getchar(); scanf("%c",&c); scanf("%d%d",&first,&second); if(c == 'A') { if(getfather(first) == getfather(second)) //cout<<"In the same gang."<<endl; printf("In the same gang.\n"); else if(getfather(first) == getfather(Max+second)) // cout<<"In different gangs."<<endl; printf("In different gangs.\n"); else //cout<<"Not sure yet."<<endl; printf("Not sure yet.\n"); } else if(c == 'D') { Unio(first,Max+second); Unio(second,Max+first); } } } return 0;}