求最小生成树的最大边。
#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; }