HDU 1233 还是畅通工程

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233

krusal算法裸题

krusal算法是基于“避圈法”的思想,避圈法可以用并查集实现。

krusal又是基于贪心思想的。

先把所有边按从小到大的顺序排序。然后,逐个选取,在选取的过程中,如果查询到两个端点不在同一个集合,那么必然选择它作为最小生成树的一部分,并合并这两个端点。

如果查询到这两个端点在同一个集合里,那么继续选取下一条边,直至选取了n-1条边,算法结束。

算法复杂度为排序的复杂度。O(e*log(e))

#include
#include
using namespace std;
const int maxn=10005;
struct node { int from,to,len;} edge[maxn];//储存边的数据结构
int n,fa[maxn],m,ans,q;
bool cmp(node a,node b) { return a.len>n,n)
    {
        m=n*(n-1)/2;
        for(int i=0;i>edge[i].from>>edge[i].to>>edge[i].len;
        cout<


你可能感兴趣的:(HDU,图论-树-最小生成树)