问题描述:
一位教授喜欢沿着马路走,尤其是在有环的小路上道路和十字路口,他的想法是将每条道路的用糟糕程度来表述。
他居住的城市的道路系统是一组双向道路,每条道路连接两个路口。 人们可以从任何其他路口到达每个路口,并且没有任何道路直接将任何路口与其本身相连。碰巧的是,这个城市的每条道路的糟糕程度都不同。
如果存在一条环路(一条没有重复道路的路径,起点和终点在同一个路口)教授决定称其为“糟糕的”,其中这条道路是他指定的最高糟糕级别。
现在他希望知道他所在的城市里是否有任何不糟糕的道路。
输入:
输出:
在第一行输出不糟糕的道路的数量(int值)。在下一行按升序输出这些道路的编号。
其实题目本身就没有很理解到底要用什么方法,希望可以给出答案最好加一些解释!谢谢啦
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin >> n >> m;
vector<int> s(n);
for(int i=0;i<n;i++) s[i] = i;
vector<int> ans;
function<int(int)> FIND = [&](int x){
return x == s[x] ? x : s[x] = FIND(s[x]);
};
for(int i=1;i<=m;i++){
int u, v;
cin >> u >> v;
u -= 1;
v -= 1;
u = FIND(u);
v = FIND(v);
if(u != v){
s[u] = v;
ans.push_back(i);
}
}
cout << ans.size() << '\n';
for(auto i : ans) cout << i << ' ';
return 0;
}