zoukankan      html  css  js  c++  java
  • The Unique MST-POJ1679(次小生成树)

    http://poj.org/problem?id=1679

    次小生成树

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    #define N 200
    #define INF 0xfffffff
    
    int G[N][N],vis[N],dis[N],n,m,pre[N];
    int Max[N][N],use[N][N];
    
    void Inn()
    {
        int i,j;
        for(i=0;i<=N;i++)
        {
            dis[i]=0;
            for(j=0;j<=N;j++)
            {
                if(i==j)
                    G[i][j]=0;
                else
                    G[i][j]=INF;
            }
        }
        memset(vis,0,sizeof(vis));
        memset(use,0,sizeof(use));
        memset(Max,0,sizeof(Max));
        memset(pre,0,sizeof(pre));
    }
    
    int prime(int s)
    {
        int i,j,ans=0;
        for(i=1;i<=n;i++)
        {
            dis[i]=G[s][i];
            pre[i]=s;
        }
        vis[s]=1;
        for(i=1;i<n;i++)
        {
            int Min=INF,dist=1;
            for(j=1;j<=n;j++)
            {
                if(!vis[j] && dis[j]<Min)
                {
                    Min=dis[j];
                    dist=j;
                }
            }
            ans+=Min;
            vis[dist]=1;
            use[dist][pre[dist]]=use[pre[dist]][dist]=1;
            for(j=1;j<=n;j++)
            {
                if(vis[j] && j!=dist)
                    Max[dist][j]=Max[j][dist]=max(Max[dist][j],dis[dist]);
                if(!vis[j] && dis[j]>G[dist][j])
                {
                    dis[j]=G[dist][j];
                    pre[j]=dist;
                }
            }
        }
        return ans;
    }
    
    int SMST(int a)
    {
        int minn=INF,i,j;
        for(i=1;i<=n;i++)
        {
            for(j=i+1;j<=n;j++)
            {
                if(!use[i][j] && G[i][j]!=INF)
                    minn=min(minn,a-Max[i][j]+G[i][j]);
            }
        }
        return minn;
    }
    
    int main()
    {
        int T,i,a,b,c;
        scanf("%d",&T);
        while(T--)
        {
            Inn();
            scanf("%d %d",&n,&m);
            for(i=0;i<m;i++)
            {
                scanf("%d %d %d",&a,&b,&c);
                G[a][b]=G[b][a]=c;
            }
            int n1=prime(1);
            int n2=SMST(n1);
            if(n1==n2)
                printf("Not Unique!
    ");
            else
                printf("%d
    ",n1);
        }
        return 0;
    }
  • 相关阅读:
    .net core相关博客
    通过几个Hello World感受.NET Core全新的开发体验
    ASP.NET Core 介绍
    ASP.NET MVC4企业级实战目录
    ASP.NET MVC4入门到精通系列目录汇总
    HTTP详解
    壮哉大微软,.Net人的春天来了,你准备好了嘛!
    简析 .NET Core 构成体系
    .Net Core[译文]
    OI再见
  • 原文地址:https://www.cnblogs.com/linliu/p/4867840.html
Copyright © 2011-2022 走看看