EOJ 5 Bad Cowtractors

    技术2022-05-20  40

     

    /*最大生成树 

    注意重边

    */

    #include <iostream>

    #include <cstring>

    using namespace std;

    int vis[1050],dis,edge[1050][1050],lowc[1050],n,m;

    int prim()

    {

        int i,j,p,maxc,res=0;

        memset(vis,0,sizeof(vis));

        vis[0]=1;

        for(i=1;i<n;i++)

            lowc[i]=edge[0][i];

        for(i=1;i<n;i++)

        {

            maxc=0;

            p=-1;

            for(j=0;j<n;j++)

            {

                if(!vis[j] && lowc[j]>maxc)

                {

                    maxc=lowc[j];

                    p=j;

                }

            }

            if(maxc==0)

                return -1;

            res+=maxc;

            vis[p]=1;

            for(j=1;j<n;j++)

                if(!vis[j] && lowc[j]<edge[p][j])

                    lowc[j]=edge[p][j];

        }

        return res;

    }

     

    int main()

    {

        int i,j,x,y,z;

        scanf("%d%d",&n,&m);

        for(i=0;i<m;i++)

        {

            scanf("%d%d%d",&x,&y,&z);

            x--;

            y--;

            if(edge[x][y]<z)

                edge[y][x]=edge[x][y]=z;

        }

        printf("%d/n",prim());

        return 0;

    }

     


    最新回复(0)