poj1073

来源:互联网 发布:python的set函数 编辑:程序博客网 时间:2024/06/04 19:26
 //一道变种的并查集的题目,第一次遇到这种题,学习一下。以防以后再遇到这种题。
//另外,注意,在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;} 

原创粉丝点击