Advertisement
Korotkodul

мосты

Aug 7th, 2022 (edited)
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10. #define pii pair <int,int>
  11. #define vec vector
  12. using namespace std;
  13. using ll = long long;
  14. using ld = long double;
  15. using db = double;
  16. void cv(vector <int> &v){
  17.     for (auto x: v) cout<< (x+1) <<' ';
  18.     cout<<"\n";
  19. }
  20.  
  21. void cvl(vector <ll> &v){
  22.     for (auto x: v) cout<<x<<' ';
  23.     cout<<"\n";
  24. }
  25.  
  26.  
  27. void cvv(vector <vector <int> > &v){
  28.     for (auto x: v) cv(x);
  29.     cout<<"\n";
  30. }
  31.  
  32. void cvb(vector <bool> v){
  33.     for (bool x: v) cout<<x<<' ';
  34.     cout<<"\n";
  35. }
  36.  
  37. void cvs(vector <string>  v){
  38.     for (auto a: v){
  39.         cout<<a<<"\n";
  40.     }
  41. }
  42.  
  43. void cvp(vector <pii> a){
  44.     for (auto p: a){
  45.         cout<<p.first<<' '<<p.second<<"\n";
  46.     }
  47.     cout<<"\n";
  48. }
  49.  
  50. int n,m;
  51. vector <int> clr, dp, mndp,  ans;
  52.  
  53. vector <vector <int> > G;
  54.  
  55. map <pii, int> ed;
  56.  
  57. void dfs(int v, int pr){
  58.     clr[v] = 1;
  59.     if (pr != -1){
  60.         dp[v] = dp[pr] + 1;
  61.     }
  62.     for (int u: G[v]){
  63.         if (u != pr && clr[u] == 0){
  64.             dfs(u, v);
  65.         }
  66.         mndp[v] = min(mndp[v], mndp[u]);
  67.         if (dp[v] < mndp[u]){
  68.             ans.push_back(ed[{min(v,u), max(v,u)}]);
  69.         }
  70.     }
  71.     clr[v] = 2;
  72. }
  73.  
  74. int main()
  75. {
  76.     ios::sync_with_stdio(0);
  77.     cin.tie(0);
  78.     cout.tie(0);
  79.     cin>>n>>m;
  80.     G.assign(n, vector <int> (0));
  81.     clr.assign(n, 0);
  82.     dp.resize(n);
  83.     mndp.resize(n);
  84.     for (int i = 0; i < m; ++i){
  85.         int a,b;
  86.         cin>>a>>b; a--; b--;
  87.         ed[{min(a,b), max(a,b)}] = i;
  88.         G[a].push_back(b);
  89.         G[b].push_back(a);
  90.     }
  91.     for (int i = 0; i < n; ++i){
  92.         if (clr[i] == 0){
  93.             dp[i] = 0;
  94.             dfs(i, -1);
  95.         }
  96.     }
  97.     sort(ans.begin(), ans.end());
  98.     cout<<ans.size()<<"\n";
  99.     cv(ans);
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement