zoukankan      html  css  js  c++  java
  • hdu 3371 Connect the Cities

    链接:hdu 3371

    已知已连通的路的序号,以及未连通的路的费用,求将全部城市连通的最小费用

    也是将已连通的路的费用记为0,就转化成了基本最小生成树的题

    只是这题数组要开的大点,不然非常easy就RE了、、、

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int f[510],n,m;
    struct stu
    {
        int a,b,c;
    }t[100000];
    int cmp(struct stu x,struct stu y)
    {
        return x.c<y.c;
    }
    int find(int x)
    {
        if(x!=f[x])
            f[x]=find(f[x]);
        return f[x];
    }
    int krus()
    {
        int i,k=0,s=0,x,y;
        for(i=1;i<m;i++){
            x=find(t[i].a);
            y=find(t[i].b);
            if(x!=y){
                s+=t[i].c;
                k++;
                if(k==n-1)
                    break;
                f[x]=y;
            }
        }
        if(k!=n-1)
            s=-1;
        return s;
    }
    int main()
    {
        int N,i,j,k,s,x,y[510];
        scanf("%d",&N);
        while(N--){
            scanf("%d%d%d",&n,&m,&k);
            for(i=1;i<=n;i++)
                f[i]=i;
            for(i=1;i<=m;i++)
                scanf("%d%d%d",&t[i].a,&t[i].b,&t[i].c);
            m++;
            while(k--){
                scanf("%d",&x);
                for(i=1;i<=x;i++)
                    scanf("%d",&y[i]);
                for(i=1;i<=x;i++)
                    for(j=1;j<i;j++){
                        t[m].a=y[i];
                        t[m].b=y[j];
                        t[m++].c=0;
                    }
            }
            sort(t+1,t+m,cmp);
            s=krus();
            printf("%d
    ",s);
        }
        return 0;
    }


  • 相关阅读:
    [LUOGU] NOIP提高组模拟赛Day1
    关于NX Check_Mate功能外部开发心得
    hibernate增删改
    eval转json
    day24(JAVAWEB上传与下载)
    struts2执行流程
    oracle之简单总结
    设计模式之装饰者模式
    第五周学习总结
    第四周学习总结
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4573375.html
Copyright © 2011-2022 走看看