Advertisement
Tbl_Mne_Ne_Dryg

Untitled

Sep 25th, 2020
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. vector<vector<pair<int, int>>> g;
  6. vector<bool> used;
  7. vector<int> tin;
  8. vector<int> tup;
  9. int timer = 0;
  10. vector<int> ans;
  11.  
  12. void dfs(int v, int pr, int ind) {
  13.     used[v] = 1;
  14.     tin[v] = timer++;
  15.     tup[v] = tin[v];
  16.     for(int i = 0; i < g[v].size(); i++) {
  17.         int to = g[v][i].first;
  18.         if(g[v][i].second == ind) continue;
  19.         if(!used[to]) { // прямое
  20.             dfs(to, v, g[v][i].second);
  21.             tup[v] = min(tup[v], tup[to]);
  22.         }
  23.         else {  // обратное
  24.             tup[v] = min(tup[v], tin[to]);
  25.         }
  26.     }
  27.     if(tin[pr] < tup[v]) {
  28.         ans.push_back(ind);
  29.     }
  30. }
  31.  
  32. int main() {
  33.     int n, m;
  34.     cin >> n >> m;
  35.     g.resize(n);
  36.     tin.resize(n);
  37.     tup.resize(n);
  38.     used.resize(n);
  39.     for(int i = 0; i < m; i++) {
  40.         int a, b;
  41.         cin >> a >> b;
  42.         if(a > b) {
  43.             swap(a, b);
  44.         }
  45.         a--;
  46.         b--;
  47.         g[a].push_back({b, i});
  48.         g[b].push_back({a, i});
  49.     }
  50.     for(int i = 0; i < n; i++) {
  51.         if(!used[i]) {
  52.             dfs(i, i, i);
  53.         }
  54.     }
  55.     sort(ans.begin(), ans.end());
  56.     cout << ans.size() << '\n';
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement