Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. const int nmax=2e3+10;
  5. vector<int> G[nmax];
  6. int low[nmax];
  7. bool vis[nmax];
  8. int pom=2;
  9. int preorder[nmax];
  10. int licznik=1;
  11. int dwuspojna[nmax];
  12. void dfs(int x,int ojciec)
  13. {
  14.     //cout<<x<<" ";
  15.     vis[x]=true;
  16.     preorder[x]=licznik;
  17.     low[x]=licznik;
  18.     licznik++;
  19.     for(int i=0;i<G[x].size();i++)
  20.     {
  21.         int a=G[x][i];
  22.         if(a!=ojciec)
  23.         {
  24.             if(vis[a])
  25.                 low[x]=min(low[x],preorder[a]);
  26.             else
  27.             {
  28.                 dfs(a,x);
  29.                 low[x]=min(low[x],low[a]);
  30.             }
  31.         }
  32.     }
  33. }
  34. void kladz(int x)
  35. {
  36.     vis[x]=true;
  37.     for(int i=0;i<G[x].size();i++)
  38.     {
  39.         int a=G[x][i];
  40.         if(!vis[a])
  41.         {
  42.             if(low[a]==preorder[a])
  43.             {
  44.                 dwuspojna[a]=pom;
  45.                 pom++;
  46.             }
  47.             else
  48.             {
  49.                 dwuspojna[a]=dwuspojna[x];
  50.             }
  51.             kladz(a);
  52.         }
  53.  
  54.     }
  55.  
  56. }
  57. int main()
  58. {
  59.     int n;
  60.     cin>>n;
  61.     for(int i=2;i<=n;i++)
  62.     {
  63.         for(int j=1;j<i;j++)
  64.         {
  65.             int a;
  66.             cin>>a;
  67.             if(a)
  68.             {
  69.                 G[j].push_back(i);
  70.             }
  71.             else
  72.             {
  73.                 G[i].push_back(j);
  74.             }
  75.         }
  76.     }
  77.     dfs(1,0);
  78.     for(int i=1;i<=n;i++)
  79.     {
  80.         for(int j=0;j<G[i].size();j++)
  81.         {
  82.             cout<<G[i][j]<<" ";
  83.         }
  84.         cout<<"\n";
  85.     }
  86.     cout<<"\n";
  87.     for(int i=1;i<=n;i++)
  88.         cout<<preorder[i]<<" "<<low[i]<<"\n";
  89.     fill(vis,vis+nmax,0);
  90.     dwuspojna[1]=1;
  91.     kladz(1);
  92.     cout<<"\n";
  93.     for(int i=1;i<=n;i++)
  94.         cout<<dwuspojna[i]<<" ";
  95. }
  96. /*
  97. 8
  98. 1
  99. 1 1
  100. 1 0 1
  101. 1 1 1 1
  102. 1 1 1 1 1
  103. 1 1 1 1 0 1
  104. 1 1 1 1 0 1 1
  105. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement