Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- vector<pair<int, int>> G[500007];
- int pre[500007], low[500007], nr, liczba_mostow;
- bool w[500007], most[1000007];
- void DFS(int a, int p = -1, int to = 0, int k = 0){
- w[a] = 1;
- pre[a] = low[a] = ++nr;
- for(auto i : G[a]){
- tie(to, k) = i;
- if(to == p) continue;
- if(w[to]) low[a] = min(low[a], pre[to]);
- else{
- DFS(to, a);
- low[a] = min(low[a], low[to]);
- if(low[to] > pre[a] && !most[k]){
- most[k] = 1;
- liczba_mostow++;
- }
- }
- }
- }
- int main(){
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- int n, m;
- cin >> n >> m;
- for(int i = 0, a, b;i < m;i++){
- cin >> a >> b;
- G[a].emplace_back(b, i + 1);
- G[b].emplace_back(a, i + 1);
- }
- DFS(1);
- cout << liczba_mostow << '\n';
- for(int i = 1;i <= m;i++)
- if(most[i])
- cout << i << ' ';
- }
Advertisement
Add Comment
Please, Sign In to add comment