Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:一A留念In Reply To:一A留念 Posted by:555333444 at 2015-10-28 11:47:42 > #include <cstdio> > #include <cstring> > #define MAX_M 100100 > #define MAX_N 100100 > int f[MAX_N],N,M,T,op1,op2; > int diff[MAX_N]; > void init(int N){for(int i = 0;i < N;++i)f[i] = i;} > int find(int x){return f[x] == x ? f[x] : f[x] = find(f[x]);} > void merge(int x,int y){x = find(x);y = find(y);f[x] = y;} > bool same(int x,int y){return find(x) == find(y);} > int main(){ > scanf("%d",&T); > while(T--){ > memset(diff,-1,sizeof(diff)); > scanf("%d%d",&N,&M);getchar(); > init(N + 10); > for(int i = 0;i < M;++i){ > char ch = getchar(); > scanf("%d%d",&op1,&op2);getchar(); > if(ch == 'A'){ > if(same(op1,op2))printf("In the same gang.\n"); > else if(same(diff[op1],op2))printf("In different gangs.\n"); > else printf("Not sure yet.\n"); > }else if(ch == 'D'){ > if(diff[op1] == -1)diff[op1] = op2; > if(diff[op2] == -1)diff[op2] = op1; > merge(diff[op1],op2);merge(diff[op2],op1); > } > } > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator