poj2485 Highways

求最小生成树的最大边。

#include<iostream>
#include<stdio.h>
#include<string.h>
#define MAXD 510
#define INF 0x3f3f3f3f
using namespace std;
int T,N,graph[MAXD][MAXD],res;

void MST_PRIM()
{
    int vis[MAXD],key[MAXD];
    memset(vis,0,sizeof(vis));
    memset(key,0x3f,sizeof(key));
    key[1]=0;
    int i,j;
    for(i=1;i<=N;i++)
    key[i]=graph[1][i];
    vis[1]=true;
    int flag,p;
    res=0;
    for(i=1;i<N;i++)
    {
        flag=INF,p=-1;
        for(j=1;j<=N;j++)
        {
            if(!vis[j]&&key[j]<flag)
            {
                flag=key[j];
                p=j;
            }
        }
        vis[p]=true;
        if(res<flag)
        res=flag;
        for(j=1;j<=N;j++)
        {
            if(!vis[j]&&graph[p][j]<key[j])
            key[j]=graph[p][j];
        }
    }
}

int main()
{
    //freopen("test.txt","r",stdin);
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&N);
        int i,j;
        for(i=1;i<=N;i++)
        {
            for(j=1;j<=N;j++)
            {
                scanf("%d",&graph[i][j]);
            }
        }
        MST_PRIM();
        printf("%d\n",res);
    }
    return 0;
}

 

posted @ 2013-01-21 15:50  longlongago  Views(146)  Comments(0Edit  收藏  举报