Advertisement
IlidanBabyRage

389.cpp

Feb 20th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <fstream>
  6.  
  7. using namespace std;
  8.  
  9. typedef long long int lli;
  10. typedef unsigned long long ulli;
  11. typedef vector<int> vint;
  12.  
  13. vint _prev;
  14. char *vis, *ans;
  15.  
  16. void ds(vint *v, int k, int last);
  17.  
  18.  
  19. int main(){
  20.  
  21.     int n, m, t1, t2, cnt;
  22.     cin >> n >> m;
  23.     vint *nar = new vint[n];
  24.     vint *v = new vint[m];
  25.  
  26.     _prev.resize(m);
  27.     vis = new char[m];
  28.     ans = new char[m];
  29.     for (int i = 0; i < m; i++)
  30.         vis[i] = ans[i] = 0;
  31.     cnt = 0;
  32.  
  33.     for (int i = 0; i < m; i++){
  34.         cin >> t1 >> t2;
  35.         --t1, --t2;
  36.         nar[t1].push_back(cnt);
  37.         nar[t2].push_back(cnt);
  38.         cnt++;
  39.     }
  40.     for (int i = 0; i < n; i++)
  41.         for (int j = 0; j < nar[i].size(); j++)
  42.             for (int k = 0; k < nar[i].size(); k++)
  43.                 if (k != j)
  44.                     v[nar[i][j]].push_back(nar[i][k]);
  45.  
  46.     cnt = m;
  47.  
  48.     ds(v, 0, -1);
  49.  
  50.     for (int i = 0; i < m; i++)
  51.         cnt -= ans[i];
  52.     cout << cnt << endl;
  53.     for (int i = 0; i < m; i++){
  54.         if (!ans[i])
  55.             cout << i + 1 << " ";
  56.     }
  57.  
  58.  
  59.     delete [] nar;
  60.     delete [] v;
  61.     delete [] vis;
  62.     delete [] ans;
  63.  
  64.     return 0;
  65. }
  66.  
  67.  
  68. void ds(vint *v, int k, int last){
  69.     _prev[k] = last;
  70.     vis[k] = 1;
  71.     int cur;
  72.     for (int i = 0; i < v[k].size(); i++){
  73.         if (v[k][i] == last)
  74.             continue;
  75.         if (vis[v[k][i]]){
  76.             cur = k;
  77.             do{
  78.                 ans[cur] = 1;
  79.                 cur = _prev[cur];
  80.             } while (cur != v[k][i]);
  81.             ans[cur] = 1;
  82.         } else
  83.             ds(v, v[k][i], k);
  84.     }
  85.     vis[k] = 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement