Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- vector<int> ans;
- vector<vector<pair<int, int>>> g;
- vector<int> tin;
- vector<int> tup;
- int c = 1;
- void dfs(int v, int p){
- tin[v] = c++;
- tup[v] = tin[v];
- for(auto to:g[v]){
- int u = to.first;
- if(u == p) continue;
- if(tin[u] > 0){
- tup[v] = min(tup[v], tin[u]);
- }
- else{
- dfs(u, v);
- tup[v] = min(tup[v], tup[u]);
- if(tup[u] > tin[v]){
- ans.push_back(to.second);
- }
- }
- }
- }
- int main(){
- int n, m;
- cin >> n >> m;
- for(int i = 0; i < n; ++i){
- g.push_back({});
- tup.push_back(0);
- tin.push_back(0);
- }
- for(int i = 1; i <= m; ++i){
- int u, v;
- cin >> u >> v;
- g[u - 1].push_back({v - 1, i});
- g[v - 1].push_back({u - 1, i});
- }
- for(int i = 0; i < n; ++i){
- if(tin[i] == 0)
- dfs(i, -1);
- }
- sort(ans.begin(), ans.end());
- cout << ans.size() << "\n";
- for(int i = 0; i < ans.size(); ++i){
- cout << ans[i] << "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement