hdu1863 最小生成树基础

来源:互联网 发布:淘宝开店的优势 编辑:程序博客网 时间:2024/05/22 17:47

点击打开链接


#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>#define MAXN 10005using namespace std;struct Path{    int u,v,w;    bool operator<(const Path p)const{        return w<p.w;    }}path[MAXN];int n,m,p[MAXN];int find(int x){    return p[x]==x?p[x]:find(p[x]);}void Kruskal(){    int i,ans=0,sum=1;    for(i=1;i<=m;i++) p[i]=i;    sort(path,path+n);    for(i=0;i<n;i++){        int x=find(path[i].u);        int y=find(path[i].v);        if(x!=y){            sum++;            ans+=path[i].w;            p[x]=y;        }//if    }//for    if(sum==m) printf("%d\n",ans);else printf("?\n");    for(i=1;i<=m;i++) printf("%d ",p[i]);}int main(){    while(scanf("%d%d",&n,&m),n){        for(int i=0;i<n;i++) scanf("%d%d%d",&path[i].u,&path[i].v,&path[i].w);        Kruskal();    }    return 0;}


0 0