poj-2395

来源:互联网 发布:网络电缆测试仪怎么用 编辑:程序博客网 时间:2024/05/16 09:56

求最小生成树的最大边 ,初始值设一千万还是WA也是醉了,看了解题报告才发现必须足够大才可以。

#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>#include <stdlib.h>using namespace std;int vis[10010];int low[10010];int p[2010][2010];int i,j,k;int minn ,pos;int n,m;int prim(){    int ans = -0x7fffffff;    memset (vis,0,sizeof(vis));    pos=1;    vis[1]=1;    for (i =1;i<=n;i++)    {        if (i!=pos)            low[i] = p[i][pos];    }    for (i=1;i<n;i++)    {        minn = 0x7fffffff;        for (int i=1;i<=n;i++)        {            if (!vis[i] && minn > low[i])            {                minn = low[i];                pos = i;            }        }        ans = max (minn,ans);        vis[pos]=1;        for (int i=1;i<=n;i++)        {            if (!vis[i] && low[i] > p[i][pos])                low[i]=p[pos][i];        }    }    return ans;}int main(){    while (scanf ("%d%d",&n,&m)!=EOF)    {        int c,d,e;        for ( i =1;i<=n;i++)            for( j=1;j<=n;j++)        {            if (i == j)                p[i][j] = 0;            else                p[i][j] =0x7fffffff;        }        for (i =1;i<=m;i++)        {            scanf ("%d%d%d",&c,&d,&e);            if (p[c][d] > e)                p[c][d]=p[d][c]=e;        }        int res = prim();        printf("%d\n",res);    }    return 0;}


0 0
原创粉丝点击