SuitNdtie

Chi-sensei

Apr 15th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<vector>
  3. using namespace std;
  4. typedef long long int ll;
  5. int n,m;
  6. vector<int> adj[2010];
  7. int color[2010];
  8. int const mod = 1e9+7;
  9. bool dfs(int u,int c){
  10.     if(color[u] != 0){
  11.         return color[u] == c;
  12.     }
  13.     color[u] = c;
  14.     for(int i=0;i<adj[u].size();i++){
  15.         int v = adj[u][i];
  16.         if(!dfs(v, c == 1 ? 2 : 1)){
  17.             return false;
  18.         }
  19.     }
  20.     return true;
  21. }
  22.  
  23.  
  24. int main()
  25. {
  26.     scanf("%d %d",&n,&m);
  27.    
  28.     for(int i=0;i<m;i++){
  29.         int u,v;
  30.         scanf("%d %d",&u,&v);
  31.         adj[u].push_back(v);
  32.         adj[v].push_back(u);
  33.     }
  34.     int T;
  35.     scanf("%d",&T);
  36.    
  37.     int cntcom = 0;
  38.     bool isbipartite = true;
  39.     for(int i=1;i<=n;i++){
  40.         if(color[i] == 0){
  41.             cntcom++;
  42.             if(!dfs(i,1)){
  43.                 isbipartite = false;
  44.                 break;
  45.             }
  46.         }
  47.     }
  48.    
  49.     if(T == 1){
  50.         printf("%s",(isbipartite ? "Yes" : "No"));
  51.     }
  52.     else if(T == 2){
  53.         if(isbipartite){
  54.             printf("%s\n",(isbipartite ? "Yes" : "No"));
  55.             for(int i=1;i<=n;i++){
  56.                 if(color[i] == 1){
  57.                     printf("%d ",i);
  58.                 }
  59.             }  
  60.             printf("\n");
  61.             for(int i=1;i<=n;i++){
  62.                 if(color[i] == 2){
  63.                     printf("%d ",i);
  64.                 }
  65.             }  
  66.         }
  67.         else{
  68.             printf("%s\n",(isbipartite ? "Yes" : "No"));
  69.         }
  70.        
  71.     }
  72.     else{
  73.         if(isbipartite){
  74.             ll ans = 1;
  75.             for(int i=1;i<=cntcom;i++){
  76.                 ans = ((ans % mod) * (2 % mod))%mod;
  77.             }
  78.             printf("%lld",ans);
  79.         }
  80.         else{
  81.             printf("0");
  82.         }
  83.     }
  84.    
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment