DuongNhi99

SAFENET2

Mar 10th, 2022
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int64_t long long
  3. using namespace std;
  4.  
  5. const int N = 100005;
  6.  
  7. int n, m;
  8. vector<int> graph[N];
  9.  
  10. int cnt = 0;
  11. int Low[N], Visited[N];
  12. stack<int> st;
  13. int Parent[N], Last[N];
  14. int Count = 0, Ans;
  15.  
  16. bool minimize(int &a, int b) { if(a > b) a = b; else return false; return true; }
  17. bool maximize(int &a, int b) { if(a < b) a = b; else return false; return true; }
  18.  
  19. void visit(int u) {
  20.    Low[u] = Visited[u] = ++cnt;
  21.  
  22.    for(int i = 0, v; v = graph[u][i]; ++i) {
  23.       if(Visited[v])
  24.          minimize(Low[u], Visited[v]);
  25.       else {
  26.          st.push(u);
  27.          Parent[v] = u;
  28.          visit(v);
  29.          minimize(Low[u], Low[v]);
  30.  
  31.          if(Low[v] >= Visited[u]) {
  32.             int Current = 0;
  33.             Count++;
  34.             do {
  35.                v = st.top();
  36.                st.pop();
  37.  
  38.                if(maximize(Last[v], Count))
  39.                   Current++;
  40.             } while(u != v);
  41.  
  42.             maximize(Ans, Current);
  43.          }
  44.       }
  45.    }
  46.    st.push(u);
  47. }
  48.  
  49. int main(){
  50. #ifdef LOCAL
  51.    freopen("in.txt", "r", stdin);
  52. #else
  53.    //freopen("SAFENET2.inp", "r", stdin);
  54.    //freopen("SAFENET2.out", "w", stdout);
  55. #endif
  56.     ios_base::sync_with_stdio(false);
  57.    cin.tie(0); cout.tie(0);
  58.  
  59.    cin >> n >> m;
  60.    for(int i = 1; i <= m; i++){
  61.       int u, v; cin >> u >> v;
  62.       graph[u].push_back(v);
  63.       graph[v].push_back(u);
  64.    }
  65.  
  66.    for(int i = 1; i <= n; i++)
  67.       graph[i].push_back(0);
  68.  
  69.    for(int i = 1; i <= n; i++)
  70.       if(!Visited[i]) visit(i);
  71.  
  72.    cout << max(Ans, 1) << '\n';
  73.  
  74.    return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment