Advertisement
Ishu_15hu

A. NP-HARD PROBLEM

Mar 21st, 2019
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.98 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef vector<int> vi;
  4. typedef vector<long long> vll;
  5. typedef pair<int,int> pii;
  6. typedef vector< pii > vii;
  7.  
  8. #define ll          long long
  9. #define ff          first
  10. #define ss          second
  11. #define pb          push_back
  12. #define mkp         make_pair
  13. #define sz          size()
  14.  
  15. #define forf(a,b,c)    for(int i=a;i<=b;i+=c)
  16. #define forr(a,b,c)    for(int i=a;i>=b;i-=c)
  17. #define all(a)      a.begin(),a.end()
  18. #define mem(a,b)    memset(a,b,sizeof(a))
  19. #define pi          2*acos(0.0)
  20. #define End         return 0;
  21.  
  22. #define scan1(a)    scanf("%d",&a)
  23. #define scan2(a,b)  scanf("%d %d",&a,&b)
  24. #define scan3(a,b,c)  scanf("%d %d %d",&a,&b,&c)
  25. #define scanl(a)    scanf("%lld",&a)
  26. #define scanll(a,b) scanf("%lld %lld",&a,&b)
  27. #define scanlll(a,b,c) scanf("%lld %lld %lld",&a,&b,&c)
  28.  
  29. #define print1(a)    printf("%d",a)
  30. #define print2(a,b)  printf("%d %d",a,b)
  31. #define print3(a,b,c)  printf("%d %d %d",a,b,c)
  32. #define printl(a)    printf("%lld",a)
  33. #define printll(a,b) printf("%lld %lld",a,b)
  34. #define printlll(a,b,c) printf("%lld %lld %lld",a,b,c)
  35.  
  36. #define MAXN        100000007
  37. #define INF 0x3f3f3f3f
  38. //int mark[10007];vi prime;void seive(){for(int i=2;i<10000;i++){if(mark[i]==0){prime.pb(i);for(int j=i+i;j<=10000;j+=i)mark[j]=1;}}}
  39.  
  40. //freopen("input.txt", "r", stdin);
  41. vi adj[100005],res[10];
  42. int mark[100005];
  43. int color[100005];
  44.  
  45. bool bfs(int n)
  46. {
  47.     mark[n]=1;
  48.     color[n]=0;
  49.     res[0].pb(n);
  50.     queue<int>q;
  51.     q.push(n);
  52.     while(!q.empty())
  53.     {
  54.         int node=q.front();
  55.         q.pop();
  56.         for(int i=0;i<adj[node].sz;i++)
  57.         {
  58.             if(mark[adj[node][i]]==1)
  59.             {
  60.                 if(color[adj[node][i]]==color[node])
  61.                 {
  62.                     //cout<<"working"<<endl;
  63.                     return false;
  64.                 }
  65.             }
  66.                 else{
  67.                     mark[adj[node][i]]=1;
  68.                     if(color[node]==0)
  69.                         color[adj[node][i]]=1,res[1].pb(adj[node][i]);
  70.                     else color[adj[node][i]]=0,res[0].pb(adj[node][i]);
  71.  
  72.                     q.push(adj[node][i]);
  73.                 }
  74.         }
  75.     }
  76.     return true;
  77. }
  78. int main()
  79. {
  80.    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  81.     int n,m;
  82.     cin>>n>>m;
  83.     for(int i=0;i<m;i++)
  84.     {
  85.         int a,b;
  86.         cin>>a>>b;
  87.         adj[a].pb(b);
  88.         adj[b].pb(a);
  89.     }
  90.  
  91.  
  92.     for(int i=1;i<=n;i++)
  93.     {
  94.         if(mark[i]==0&&adj[i].sz>0)
  95.         {
  96.             if(bfs(i))
  97.                 {
  98.                     for(int j=0;j<2;j++)
  99.                     {
  100.                         cout<<res[j].sz<<endl;
  101.                         for(int u: res[j])
  102.                             cout<<u<<" ";
  103.                         cout<<endl;
  104.                     }
  105.                     return 0;
  106.                 }
  107.                 else{
  108.                     cout<<-1<<endl;
  109.                     return 0;
  110.                 }
  111.         }
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement