hdu 1863 kruskal

来源:互联网 发布:黑客wifi破解软件 编辑:程序博客网 时间:2024/05/21 15:01

WA无数啊!!!

#include<iostream>#include<algorithm>using namespace std;struct edge{    int u;    int v;    int w;}e[5005];int n,m;int f[110];/*void quicksort(int l,int r)       //用快排{    int j,i;    struct edge t;    if(l>r)        return ;    i=l;    j=r;    while(i!=j)    {        while(e[j].w>=e[l].w&&i<j)            j--;        while(e[i].w<=e[l].w&&i<j)            i++;        if(i<j)        {            t=e[i];e[i]=e[j];e[j]=t;        }    }    t=e[l];    e[l]=e[i];    e[i]=t;    quicksort(l,i-1);    quicksort(i+1,r);    return ;}*/bool cmp(struct edge x,struct edge y)        //sort函数排序{    if(x.w<y.w)        return 1;    return 0;}int get(int x){    return x==f[x]?x:f[x]=get(f[x]);}int mer(int v,int u){    int t1,t2;    t1=get(v);    t2=get(u);    if(t1!=t2)    {        f[t2]=t1;        return 1;    }    return 0;}int main(){    while(cin>>n>>m,n)    {        int sum=0,count=0;        for(int i=1;i<=n;i++)        {            cin>>e[i].u>>e[i].v>>e[i].w;        }        //quicksort(1,m);        sort(e+1,e+n+1,cmp);                      //下标从1开始,所以+1!!        for(int i=1;i<=m;i++)            f[i]=i;        for(int i=1;i<=n;i++)        {            if(mer(e[i].u,e[i].v))            {              //  count++;                       //坑在这里好几次!!                sum+=e[i].w;            }            //if(count==n-1)                     //应该是m-1...这个break没问题.....              //  break;        }        int c=0;        for(int i=1;i<=m;i++)        {            if(f[i]==i)                c++;        }        if(c<=1)            cout<<sum<<endl;        else            cout<<"?"<<endl;    }    return 0;}


0 0