Advertisement
Guest User

DDDD

a guest
Dec 15th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.63 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define sz(a) int((a).size())
  3. #define pb push_back
  4. #define all(c) (c).begin(),(c).end()
  5. #define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++)
  6. #define present(c,x) ((c).find(x) != (c).end())
  7. #define cpresent(c,x) (find(all(c),x) != (c).end())
  8. #define LSOne(i) (i&(-i))
  9. #define rep(i,a,b) for(int(i)=(a);(i)<(b);i++)
  10. #define BUG(x) {cout<<#x<<" = "<<x<<endl;}
  11. #define left(x) (x<<1)
  12. #define right(x) ((x<<1) +1)
  13. #define middle(s,e)(s+(e-s)/2)
  14. #define size_tree(n) 2*(int)pow(2,ceil(log2(n)))
  15. #define CL(A,I) (memset(A,I,sizeof(A)))
  16. #define endl '\n'
  17.  
  18. static const int INF = 0x3f3f3f3f;
  19. static const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
  20. static const long double epsilon = 1e-15;
  21. static const long double pi = acos((long double) -1);
  22. using namespace std;
  23. inline void init_io()
  24. {
  25.     ios_base::sync_with_stdio(false);
  26.     cin.tie(NULL);
  27. }
  28.  
  29. typedef vector<int> vi;
  30. typedef vector<vi> vvi;
  31. typedef pair<int,int> ii;
  32. typedef long long ll;
  33.  
  34. const ll M = 998244353;
  35.  
  36. int main()
  37. {
  38.     int t,n,m,u,v;
  39.     cin>>t;
  40.     vector<vector<int> > AdjList;
  41.     while(t--)
  42.     {
  43.         cin>>n>>m;
  44.         AdjList.clear();
  45.         AdjList.resize(n+1);
  46.         CL(biparties,0);
  47.         rep(i,0,m)
  48.         {
  49.             cin>>u>>v;
  50.             u--;v--;
  51.             AdjList[u].push_back(v);
  52.             AdjList[v].push_back(u);
  53.         }
  54.         int s=0;
  55.         queue<int> q;
  56.         q.push(s);
  57.         vi color(n, INF);
  58.         int numberOfBiparties = 0;
  59.         bool isBipartite = true;
  60.         ll res=1;
  61.         rep(i,0,n)
  62.         {
  63.             if(color[i]!=INF)
  64.                 continue;
  65.             color[i] = 0;
  66.             int sum=0;
  67.             while (!q.empty() & isBipartite)
  68.             {
  69.                 int u = q.front();
  70.                 q.pop();
  71.                 for (int j = 0; j < (int)AdjList[u].size(); j++)
  72.                 {
  73.                     int v = AdjList[u][j];
  74.                     if (color[v] == INF)
  75.                     {
  76.                         color[v] = 1 - color[u];
  77.                         sum+=color[v];
  78.                         q.push(v);
  79.                     }
  80.                     else if (color[v] == color[u])
  81.                     {
  82.                         isBipartite = false;
  83.                         break;
  84.                     }
  85.                 }
  86.             }
  87.             if(!isBipartite)
  88.                 cout<<0<<endl;
  89.             else
  90.                 res=(res%M * (power(2,sum, M) + power(2,n-sum, M))%M)%M;
  91.  
  92.         }
  93.         if(!isBipartite)
  94.             break;
  95.         else
  96.             cout<<res<<endl;
  97.     }
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement