Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstdio>
- #include <cstdlib>
- #include <fstream>
- using namespace std;
- typedef long long int lli;
- typedef unsigned long long ulli;
- typedef vector<int> vint;
- vint _prev;
- char *vis, *ans;
- void ds(vint *v, int k, int last);
- int main(){
- int n, m, t1, t2, cnt;
- cin >> n >> m;
- vint *nar = new vint[n];
- vint *v = new vint[m];
- _prev.resize(m);
- vis = new char[m];
- ans = new char[m];
- for (int i = 0; i < m; i++)
- vis[i] = ans[i] = 0;
- cnt = 0;
- for (int i = 0; i < m; i++){
- cin >> t1 >> t2;
- --t1, --t2;
- nar[t1].push_back(cnt);
- nar[t2].push_back(cnt);
- cnt++;
- }
- for (int i = 0; i < n; i++)
- for (int j = 0; j < nar[i].size(); j++)
- for (int k = 0; k < nar[i].size(); k++)
- if (k != j)
- v[nar[i][j]].push_back(nar[i][k]);
- cnt = m;
- ds(v, 0, -1);
- for (int i = 0; i < m; i++)
- cnt -= ans[i];
- cout << cnt << endl;
- for (int i = 0; i < m; i++){
- if (!ans[i])
- cout << i + 1 << " ";
- }
- delete [] nar;
- delete [] v;
- delete [] vis;
- delete [] ans;
- return 0;
- }
- void ds(vint *v, int k, int last){
- _prev[k] = last;
- vis[k] = 1;
- int cur;
- for (int i = 0; i < v[k].size(); i++){
- if (v[k][i] == last)
- continue;
- if (vis[v[k][i]]){
- cur = k;
- do{
- ans[cur] = 1;
- cur = _prev[cur];
- } while (cur != v[k][i]);
- ans[cur] = 1;
- } else
- ds(v, v[k][i], k);
- }
- vis[k] = 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement