Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <unordered_map>
- using namespace std;
- #include <cstdio>
- struct Edge {
- int from;
- int to;
- int number;
- };
- vector <Edge> edges[20002];
- vector<int> wow;
- int timee = 0;
- int tin[20002];
- int dp[20002];
- int used[20002];
- vector <Edge> ans;
- void dfs(int v, Edge kill_me)
- {
- int parent = kill_me.to;
- used[v] = 1;
- tin[v] = dp[v] = timee++;
- for (auto e : edges[v]) {
- if (e.to == parent) continue;
- if (used[e.to] == 1)
- dp[v] = min(dp[v], tin[e.to]);
- else {
- dfs(e.to, e);
- dp[v] = min(dp[v], dp[e.to]);
- if (dp[e.to] > tin[v])
- ans.push_back(kill_me);
- }
- }
- }
- int main()
- {
- int n, m;
- cin >> n >> m;
- for (int i = 1; i <= m; ++i)
- {
- int u, v; cin >> u >> v;
- Edge e;
- e.from = u; e.to = v; e.number = i;
- edges[u].push_back(e);
- e.from = v; e.to = u; e.number = i;
- edges[v].push_back(e);
- }
- timee = 0;
- Edge weird; weird.to = 100000; weird.from = 2000000; weird.number = -1;
- for (int i = 1; i <= n; ++i)
- if (used[i] == 0)
- dfs(i, weird);
- cout <<"size = " << ans.size() << '\n';
- int array[ans.size()];
- for (int i = 0; i < ans.size(); ++i) {
- array[i] = ans[i].number;
- }
- sort(array, array + ans.size());
- for (int i = 0; i < ans.size(); ++i) {
- cout << array[i] << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement