码迷,mamicode.com
首页 > 其他好文 > 详细

PAT T1016 Uniqueness of MST

时间:2020-02-13 13:19:31      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:int   code   class   ons   prim   scan   连通   return   ESS   

dfs判断连通块的数量,prim算法建立最小生成树并判断是否唯一~

#include<bits/stdc++.h>
using namespace std;
const int maxn=1014;
const int inf=1e9;
int g[maxn][maxn];
int d[maxn];
int visit[maxn];
int N,M;
struct edge {
    int v1,v2;
}; 
vector<edge> vi;
void dfs (int s) {
    visit[s]=true;
    for (int i=1;i<=N;i++) 
    if (g[s][i]!=inf&&visit[i]==false) dfs(i);
}
int dfsTrave () {
    int block=0;
    for (int i=1;i<=N;i++) {
        if (visit[i]==false) {
            dfs(i);
            block++;
        }
    }
    return block;
}
int flag=0;
int prim (int s) {
    fill (d,d+maxn,inf);
    fill (visit,visit+maxn,0);
    d[s]=0;
    int ans=0;
    for (int i=1;i<=N;i++) {
        int u=-1,min=inf;
        for (int j=1;j<=N;j++) 
        if (visit[j]==false&&d[j]<min) {
            u=j;
            min=d[j];
        }
        if (u==-1) return -1;
        visit[u]=1;
        ans+=d[u];
        int num=0;
        for (int v=1;v<=N;v++) 
        if (visit[v]&&g[u][v]==min) num++;
        if (num>1) flag++;
        for (int v=1;v<=N;v++) {
            if (visit[v]==false&&g[u][v]!=inf&&g[u][v]<d[v]) 
            d[v]=g[u][v];
        }
    }
    return ans;
}
int main () {
    scanf ("%d %d",&N,&M);
    int u,v;
    for (int i=1;i<=N;i++) 
    for (int j=1;j<=N;j++)
    g[i][j]=inf;
    for (int i=0;i<M;i++) {
        scanf ("%d %d",&u,&v);
        scanf ("%d",&g[u][v]);
        g[v][u]=g[u][v];
    } 
    int block=dfsTrave ();
    if (block>1) {
        printf ("No MST\n");
        printf ("%d",block);
        return 0;
    }
    fill (visit,visit+maxn,false);
    int mst=prim(1);
    printf ("%d\n",mst);
    if (flag==0) printf ("Yes");
    else printf ("No");
    return 0;
}

 

PAT T1016 Uniqueness of MST

标签:int   code   class   ons   prim   scan   连通   return   ESS   

原文地址:https://www.cnblogs.com/zhanglichen/p/12302917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!