Source Code
Problem: 1703 | User: Praesidio | |
Memory: 4448K | Time: 375MS | |
Language: C++ | Result: Accepted |
- Source Code
#include <cstdio> #include <algorithm> using namespace std; int father[1000002]; int relation[1000002]; int n,m,x,y; char ch; int find( int x ) { if (father [ x ] == x) return x; int t = father [ x ]; father [ x ] = find ( father [ x ] ); relation [ x ] = (relation [ x ] ^ relation [ t ]); return father [ x ]; } void Union( int x, int y ) { int u = find ( x ) , v = find ( y ) ; father [ v ] = u ; relation [ v ] = ~(relation [ x ] ^ relation [ y ]); } int main() { int Test; scanf("%d",&Test); while (Test--) { memset( relation , 0 , sizeof( relation ) ); scanf("%d%d",&n,&m); getchar(); for (int i=1 ; i <= n ; i++ ) father[ i ] = i ; for (int i = 0 ; i < m ; i++ ) { scanf("%c %d %d", &ch , &x ,&y); getchar(); if ( ch == 'A' ) { if ( find (x) == find (y) ) { if ( relation [ x ] != relation [ y ] ) printf("In different gangs.\n"); else printf("In the same gang.\n"); } else printf("Not sure yet.\n"); } else if ( ch == 'D' ) { Union( x , y ); } } } return 0; }