Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using i64 = long long;
- using pi32 = pair<int, int>;
- using pi64 = pair<i64, i64>;
- const int N = 1e5 + 5;
- int n, nE;
- vector<int> graph[N];
- int CriticalEdge = 0;
- bool CriticalNode[N];
- int Num[N], Low[N], Time = 0;
- void visit(int u, int p) {
- int NumChild = 0;
- Low[u] = Num[u] = ++Time;
- for (int v : graph[u])
- if (v != p) {
- if (Num[v] != 0)
- Low[u] = min(Low[u], Num[v]);
- else {
- visit(v, u);
- NumChild++;
- Low[u] = min(Low[u], Low[v]);
- if (Low[v] >= Num[v])
- CriticalEdge++;
- if (u == p) {
- if (NumChild >= 2)
- CriticalNode[u] = true;
- } else {
- if (Low[v] >= Num[u])
- CriticalNode[u] = true;
- }
- }
- }
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cin >> n >> nE;
- for (int i = 1; i <= nE; i++) {
- int u, v; cin >> u >> v;
- graph[u].push_back(v);
- graph[v].push_back(u);
- }
- for (int i = 1; i <= n; i++)
- if (!Num[i]) visit(i, i);
- int Count = 0;
- for (int i = 1; i <= n; i++)
- if (CriticalNode[i]) Count++;
- cout << Count << ' ' << CriticalEdge;
- return 0;
- }
Add Comment
Please, Sign In to add comment