POJ 2485Highways (又一个Prim最小生成树水题)

来源:互联网 发布:淘宝淘宝联盟怎么用法 编辑:程序博客网 时间:2024/05/16 05:33

题目很直观, 只要输出最小生成树中最大的边权;

Code:


#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<queue>using namespace std;const int inf=0x3f3f3f3f3f;const int maxn = 505;int dis[maxn][maxn];int ans, n;int max(int a, int b){return (a>b)?a:b;}void prim(){int vis[maxn], d[maxn], i, j, k;memset(vis, 0, sizeof(vis));memset(d, inf, sizeof(d));int MIN=inf, v=0;d[1]=0;while(true){MIN = inf , v = -1;for(i=1; i<=n; i++){if(!vis[i] && d[i]<MIN){v = i;MIN = d[i];}}if(v==-1) return ;vis[v] = 1;ans= max(ans,MIN);for(i=1;i<=n;i++){if(!vis[i] && d[i] > dis[v][i]){d[i] = dis[v][i];}}}return;}int main(){int T, i, j;//freopen("in.txt", "r", stdin);scanf("%d", &T);while(T--){memset(dis, 0, sizeof(dis));ans=0;scanf("%d", &n);for(i=1; i<=n; i++){for(j=1; j<=n; j++){scanf("%d", &dis[i][j]);}}prim();printf("%d\n", ans);}return 0;}


0 0