Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 31102 | Accepted: 9583 |
Description
Input
Output
Sample Input
1 5 5 A 1 2 D 1 2 A 1 2 D 2 4 A 1 4
Sample Output
Not sure yet. In different gangs. In the same gang.
Source
题目大意:
解题思路:T组测试数据,n个人,m组询问,D a b 表示 a,b 不在同一个gang(虽然不知道gang是什么意思?) ,A a b表示a和b的关系。
解题代码:只需要并查集,再加入一个enemy数组记录某人的一个敌人即可。
#include <iostream> #include <cstdio> using namespace std; const int maxn=110000; int father[maxn],enemy[maxn],n,m; int find(int x){ if(father[x]!=x){ father[x]=find(father[x]); } return father[x]; } void combine(int x,int y){ int a=find(x),b=find(y); father[b]=a; } void solve(){ char ch; int a,b; while(m-- >0){ getchar(); scanf("%c%d%d",&ch,&a,&b); //cout<<ch<<"->"<<a<<"->"<<b<<endl; if(ch=='D'){ if(enemy[a]!=-1) combine(enemy[a],b); if(enemy[b]!=-1) combine(enemy[b],a); enemy[a]=b; enemy[b]=a; }else{ if(enemy[a]==-1 || enemy[b]==-1 ) printf("Not sure yet.\n"); else{ if(find(a)==find(b)) printf("In the same gang.\n"); else if(find(enemy[a])==find(b) || find(a)==find(enemy[b]) ) printf("In different gangs.\n"); else printf("Not sure yet.\n"); } } } } int main(){ int t; scanf("%d",&t); while(t-- >0){ scanf("%d%d",&n,&m); for(int i=0;i<=n;i++){ father[i]=i; enemy[i]=-1; } solve(); } return 0; }
POJ 1703 Find them, Catch them (数据结构-并查集),布布扣,bubuko.com
POJ 1703 Find them, Catch them (数据结构-并查集)
原文:http://blog.csdn.net/a1061747415/article/details/38302345