DuongNhi99

Khop-Cau

Mar 26th, 2021 (edited)
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using i64 = long long;
  5. using pi32 = pair<int, int>;
  6. using pi64 = pair<i64, i64>;
  7.  
  8. const int N = 1e5 + 5;
  9.  
  10. int n, nE;
  11. vector<int> graph[N];
  12.  
  13. int CriticalEdge = 0;
  14. bool CriticalNode[N];
  15. int Num[N], Low[N], Time = 0;
  16.  
  17. void visit(int u, int p) {
  18.     int NumChild = 0;
  19.     Low[u] = Num[u] = ++Time;
  20.     for (int v : graph[u])
  21.         if (v != p) {
  22.             if (Num[v] != 0)
  23.                 Low[u] = min(Low[u], Num[v]);
  24.             else {
  25.                 visit(v, u);
  26.                 NumChild++;
  27.                 Low[u] = min(Low[u], Low[v]);
  28.  
  29.                 if (Low[v] >= Num[v])
  30.                     CriticalEdge++;
  31.  
  32.                 if (u == p) {
  33.                     if (NumChild >= 2)
  34.                         CriticalNode[u] = true;
  35.                 } else {
  36.                     if (Low[v] >= Num[u])
  37.                         CriticalNode[u] = true;
  38.                 }
  39.             }
  40.         }
  41. }
  42.  
  43. int main() {
  44.     ios_base::sync_with_stdio(false);
  45.     cin.tie(NULL);
  46.  
  47.     cin >> n >> nE;
  48.     for (int i = 1; i <= nE; i++) {
  49.         int u, v; cin >> u >> v;
  50.         graph[u].push_back(v);
  51.         graph[v].push_back(u);
  52.     }
  53.  
  54.     for (int i = 1; i <= n; i++)
  55.         if (!Num[i]) visit(i, i);
  56.  
  57.     int Count = 0;
  58.     for (int i = 1; i <= n; i++)
  59.         if (CriticalNode[i]) Count++;
  60.  
  61.     cout << Count << ' ' << CriticalEdge;
  62.  
  63.     return 0;
  64. }
  65.  
Add Comment
Please, Sign In to add comment