Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define sz(a) int((a).size())
- #define pb push_back
- #define all(c) (c).begin(),(c).end()
- #define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++)
- #define present(c,x) ((c).find(x) != (c).end())
- #define cpresent(c,x) (find(all(c),x) != (c).end())
- #define LSOne(i) (i&(-i))
- #define rep(i,a,b) for(int(i)=(a);(i)<(b);i++)
- #define BUG(x) {cout<<#x<<" = "<<x<<endl;}
- #define left(x) (x<<1)
- #define right(x) ((x<<1) +1)
- #define middle(s,e)(s+(e-s)/2)
- #define size_tree(n) 2*(int)pow(2,ceil(log2(n)))
- #define CL(A,I) (memset(A,I,sizeof(A)))
- #define endl '\n'
- static const int INF = 0x3f3f3f3f;
- static const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
- static const long double epsilon = 1e-15;
- static const long double pi = acos((long double) -1);
- using namespace std;
- inline void init_io()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- }
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef pair<int,int> ii;
- typedef long long ll;
- const ll M = 998244353;
- int main()
- {
- int t,n,m,u,v;
- cin>>t;
- vector<vector<int> > AdjList;
- while(t--)
- {
- cin>>n>>m;
- AdjList.clear();
- AdjList.resize(n+1);
- CL(biparties,0);
- rep(i,0,m)
- {
- cin>>u>>v;
- u--;v--;
- AdjList[u].push_back(v);
- AdjList[v].push_back(u);
- }
- int s=0;
- queue<int> q;
- q.push(s);
- vi color(n, INF);
- int numberOfBiparties = 0;
- bool isBipartite = true;
- ll res=1;
- rep(i,0,n)
- {
- if(color[i]!=INF)
- continue;
- color[i] = 0;
- int sum=0;
- while (!q.empty() & isBipartite)
- {
- int u = q.front();
- q.pop();
- for (int j = 0; j < (int)AdjList[u].size(); j++)
- {
- int v = AdjList[u][j];
- if (color[v] == INF)
- {
- color[v] = 1 - color[u];
- sum+=color[v];
- q.push(v);
- }
- else if (color[v] == color[u])
- {
- isBipartite = false;
- break;
- }
- }
- }
- if(!isBipartite)
- cout<<0<<endl;
- else
- res=(res%M * (power(2,sum, M) + power(2,n-sum, M))%M)%M;
- }
- if(!isBipartite)
- break;
- else
- cout<<res<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement