CF1927F. Microcycle
题意:给定一个n个点,m条边的无向图,图不一定连通,要求找到图中的一个环,该环上的最小边权比图中所有环的边权要小,输出这个最小边权,所在的环上的节点数量以及按顺序输出所在的环上的所有节点。
思路:因为要求最小边权,我们可以想到要用kruskal算法,首先将所有边权从大到小的顺序排序,然后按边权从大到小建立图,用并查集来判断环,因为是从大到小遍历边权,因此如果第一次遍历到两个节点在一个集合中,这条边就是所在环的最小边权,然后就可以找到最小的环的边权,同时记录下来最小边权的两个节点,再跑一边dfs找到换上的节点即可
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
typedef pair<int,int>pii;
struct Node
{
int u,v,w;
const bool operator<(Node t)const
{
return w>t.w;
}
}edge[N];
int f[N];
int find(int x)
{
if(x!=f[x])f[x]=find(f[x]);
return f[x];
}
int main()
{