➤ Problem Link : 1093D. Beautiful Graph
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
ll m = 998244353;
vector<int> adj[300001];
bool visited[300001];
bool visited2[300001];
int color[300001];
int color2[300001];
ll dfs(int v,int n,int p,int oe)
{
ll ans=1;
color[v]=oe;
if(oe==1)
{
for(int i=0;i<adj[v].size();i++)
{
if(adj[v][i]==p)
continue;
if(!visited[adj[v][i]])
{
visited[adj[v][i]]=1;
ans=(ans*dfs(adj[v][i],n,v,2))%m;
}
else
{
if(color[adj[v][i]]==1)
{
return 0;
}
}
}
// cout<<ans<<endl;
ans=(ans*2)%m;
return ans;
}
else
{
for(int i=0;i<adj[v].size();i++)
{
if(adj[v][i]==p)
continue;
if(!visited[adj[v][i]])
{
visited[adj[v][i]]=1;
ans=(ans*dfs(adj[v][i],n,v,1))%m;
}
else
{
if(color[adj[v][i]]==2)
{
return 0;
}
}
}
// cout<<ans<<endl;
return ans%m;
}
}
ll dfs2(int v,int n,int p,int oe)
{
ll ans=1;
color2[v]=oe;
if(oe==1)
{
for(int i=0;i<adj[v].size();i++)
{
if(adj[v][i]==p)
continue;
if(!visited2[adj[v][i]])
{
visited2[adj[v][i]]=1;
ans=(ans*dfs2(adj[v][i],n,v,2))%m;
}
else
{
if(color2[adj[v][i]]==1)
{
return 0;
}
}
}
// cout<<ans<<endl;
ans=(ans*2)%m;
return ans;
}
else
{
for(int i=0;i<adj[v].size();i++)
{
if(adj[v][i]==p)
continue;
if(!visited2[adj[v][i]])
{
visited2[adj[v][i]]=1;
ans=(ans*dfs2(adj[v][i],n,v,1))%m;
}
else
{
if(color2[adj[v][i]]==2)
{
return 0;
}
}
}
// cout<<ans<<endl;
return ans%m;
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,e,u,v;
cin>>n>>e;
bool flag=0;
for(int i=0;i<=n;i++)
{
adj[i].clear();
visited[i]=0;
visited2[i]=0;
color[i]=0;
color2[i]=0;
}
for(int i=0;i<e;i++)
{
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
ll cnt=1;
for(int i=1;i<=n;i++)
{
ll tmp=-1,tmp2=-1;
if(!visited[i])
{
visited[i]=1;
tmp=dfs(i,n,-1,1)%m;
if(!tmp)
{
flag=1;
break;
}
}
if(!visited2[i])
{
visited2[i]=1;
tmp2=dfs2(i,n,-1,2)%m;
if(!tmp2)
{
flag=1;
break;
}
tmp=(tmp2 + tmp)%m;
}
if(tmp>0)
cnt=(cnt*tmp)%m;
}
if(flag)
cout<<"0\n";
else
cout<<cnt<<"\n";
}
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
