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<pi32> graph[N];
- int CriticalEdge = 0;
- bool isCutEdge[N];
- int Num[N], Low[N], Time = 0;
- void Tajan(int u, int p) {
- Low[u] = Num[u] = ++Time;
- for (int i = 0; i < graph[u].size(); ++i) {
- int v = graph[u][i].first;
- int id = graph[u][i].second;
- if (v == p) continue;
- if (Num[v])
- Low[u] = min(Low[u], Num[v]);
- else {
- Tajan(v, u);
- Low[u] = min(Low[u], Low[v]);
- isCutEdge[id] |= Low[v] > Num[u];
- }
- }
- }
- int main() {
- #ifdef LOCAL
- freopen("in.txt", "r", stdin);
- #else
- freopen("CJXAYDUNG.inp", "r", stdin);
- freopen("CJXAYDUNG.out", "w", stdout);
- #endif // LOCAL
- 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, i});
- graph[v].push_back({u, i});
- }
- for (int i = 1; i <= n; i++)
- if (!Num[i]) Tajan(i, i);
- int Count = 0;
- for (int i = 1; i <= n; i++)
- if (isCutEdge[i]) Count++;
- cout << Count << '\n';
- for (int i = 1; i <= n; i++)
- if (isCutEdge[i])
- cout << i << ' ';
- return 0;
- }
- // https://lqdoj.edu.vn/problem/cjxaydung
Advertisement
Add Comment
Please, Sign In to add comment