Advertisement
FHVirus

Untitled

Oct 22nd, 2020
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #pragma Ofast
  2. #pragma loop-opt(on)
  3. #pragma GCC target("avx,avx2")
  4. #include<unistd.h>
  5. inline char RC(){static char buf[65536],*p=buf,*q=buf;return p==q&&(q=(p=buf)+read(0,buf,65536))==buf?-1:*p++;}
  6. inline int R(){static char c;int a;while((c=RC())<'0');a=c^'0';while((c=RC())>='0')a*=10,a+=c^'0';return a;}
  7. inline void W(int n){char OB[12],OP=0,buf[12],p;if(n==0)OB[OP++]='0';p=0;while(n)buf[p++]='0'+(n%10),n/=10;for(--p;p>=0;--p)OB[OP++]=buf[p];write(1,OB,OP);}
  8.  
  9. const int N = 1e6;
  10. int n, m;
  11.  
  12. // check if solution exist
  13. int dsu1[N*2];
  14. inline int find1(int a){ return a == dsu1[a] ? a : dsu1[a] = find1(dsu1[a]);}
  15. inline void union1(int a, int b){ if(find1(a) != find1(b)) dsu1[dsu1[b]] = dsu1[a];}
  16.  
  17. // count ans
  18. int dsu2[N];
  19. inline int find2(int a){ return a == dsu2[a] ? a : dsu2[a] = find2(dsu2[a]);}
  20. inline void union2(int a, int b){ if(find2(a) != find2(b)) dsu2[dsu2[b]] = dsu2[a];}
  21.  
  22. int main(){
  23.     n = R(), m = R();
  24.     for(int i = 0; i < n; ++i)
  25.         dsu1[i] = dsu2[i] = i, dsu1[i + n] = i + n;
  26.     for(int i = 0, u, v, c; i < m; ++i){
  27.         u = R(), v = R(), c = R();
  28.         union1(u, c == 1 ? v : v + n);
  29.         union1(u + n , c == 1 ? v + n : v);
  30.         union2(u, v);
  31.     }
  32.     bool yas = true;
  33.     for(int i = 0; i < n; ++i)
  34.         if(find1(i) == find1(i + n)){
  35.             yas = false;
  36.             break;
  37.         }
  38.     if(!yas){ W(0); return 0;}
  39.  
  40.     int ans = 0, root = find2(0);
  41.     for(int i = 0; i < n; ++i)
  42.         if(find2(i) != root) union2(root, i), ans++;
  43.     long long res = 1;
  44.     for(int i = 0; i < ans; ++i)
  45.         res *= 2, res %= 1000000007;
  46.     W(res);
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement