NYOJ 502筹建工程

来源:互联网 发布:mac隐藏文件没了怎么办 编辑:程序博客网 时间:2024/04/29 08:10

题目链接:here~~

#include <iostream>#include <algorithm>#include <queue>#include <cstdio>#include <string.h>using namespace std;struct ue{    int x, y, w;    bool operator < (ue a)const    {        return w>a.w;    }};priority_queue<ue> p;int f[101];int find(int x){return f[x]==x?x:f[x]=find(f[x]);}int main(){    int N, n, m, i, j;    ue a, b;//  freopen("in.txt", "r", stdin);    cin>>N;    while (N--)    {        while (!p.empty()) p.pop();        for (i=0;i<101;i++) f[i]=i;        cin>>n>>m;        for (i=0; i<n; i++)        {            cin>>a.x>>a.y>>a.w;            if (a.x==a.y) continue;            p.push(a);        }        if (n<m-1) {printf("No solution\n");continue;}        int k=1, res=0;        while (k<m)        {            b=p.top();            int c=find(b.x), d=find(b.y);//找到b.x的根和b.y的根            if (c!=d){res+=b.w;f[b.y]=b.x;}//如果不相等,说明两个点不属于同一个连通,所以加上这条边的权值,并让两个点相连            p.pop();//删除当前操作的边            k++;//找到m-1个边后跳出循环,m-1是最少需要的边数        }        cout<<res<<endl;    }    return 0;}


原创粉丝点击