题不难,题目很难...
读了好几遍还是给理解错了,纠结!
就是求最小生成树里最大的边权值,拿过来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 ;
}