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

题不难,题目很难...

读了好几遍还是给理解错了,纠结!

就是求最小生成树里最大的边权值,拿过来poj1287一改就交,果断WA..仔细一看,权值的更新给搞错了,这是要让我郁闷到极点啊!

#include<cstdio>
#define Max(a, b)   a>b?a:b
#define Min(a, b)   a>b?b:a
using namespace std ;
int map[505][505] ;
int dis[505] ;
int n ;
int prim(){
    int i, j, ans = 0, x = 1 ;
    for(j=1; j<=n; j++)
        dis[j] = map[x][j] ;
    for(i=2; i<=n; i++){
        int min = 65537 ;
        for(j=1; j<=n; j++){
            if(min>dis[j]&&dis[j]!=0){
                min = dis[j] ;
                x = j ;
            }
        }
        dis[j] = 0 ;
        ans = Max(ans, min) ;
        for(j=1; j<=n; j++)
            dis[j] = Min(dis[j], map[x][j]) ;
    }
    return ans ;
}
int main(){
    int t, i, j, ans ;
    scanf("%d", &t) ;
    while(t--){
        scanf("%d", &n) ;
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                scanf("%d", &map[i][j]) ;
        ans = prim() ;
        printf("%d\n", ans) ;
    }
    return 0 ;

} 

posted on 2012-01-22 00:44  追逐.  阅读(190)  评论(0编辑  收藏  举报