poj 1861 最小生成树

来源:互联网 发布:穿越星际之淘宝主 编辑:程序博客网 时间:2024/04/30 04:24

最小生成树性质,最小生成树最大边的权值最小


 

#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;const int nMax=1005;const int inf=10000000;int mat[nMax][nMax],vis[nMax],p[nMax],dist[nMax];int N,M;int MST(){memset(vis,0,sizeof(vis));for(int i=1;i<=N;i++)dist[i]=(i==1?0:inf);int ret=0;for(int i=0;i<N;i++){int k=-1;for(int j=1;j<=N;j++)if(!vis[j] && (k==-1 || dist[j]<dist[k]))k=j;vis[k]=1;ret=max(ret,dist[k]);for(int j=1;j<=N;j++)if(!vis[j] && mat[k][j]){if(mat[k][j]<dist[j]){    dist[j]=mat[k][j]; p[j]=k;}}}return ret;}int main(){//    freopen("test.txt","r",stdin);    scanf("%d%d",&N,&M);    memset(mat,0,sizeof(mat));    for(int i=0;i<M;i++)    {        int u,v,w;        scanf("%d%d%d",&u,&v,&w);        mat[u][v]=mat[v][u]=w;    }    printf("%d\n%d\n",MST(),N-1);    for(int i=2;i<=N;i++)    {        int u=i,v=p[i];        if(u>v) swap(u,v);        printf("%d %d\n",u,v);    }    return 0;}


 

 

原创粉丝点击