【POJ 2485】Highways(Prim最小生成树)
Prim算法:任选一个点,加入集合,找出和它最近的点,加入集合,然后用加入集合的点去更新其它点的最近距离......这题求最小生成树最大的边,于是每次更新一下最大边。
#include <cstdio> #define max(x, y) ((x) > (y) ? (x) : (y)) #define N 505 int t, n, g[N][N], lowcost[N], used[N], ans; void prim(){ for(int i = 1; i <= n; i++){ lowcost[i] = g[1][i]; used[i] = 0; } used[1] = 1; ans = 0; for(int i = 1; i <= n; i++){ int j=1; while(used[j]) j++; for(int k = 1; k <= n; k++) if(!used[k] && lowcost[k] < lowcost[j]) j = k; ans = max(ans, lowcost[j]); used[j] = 1; for(int k = 1; k <= n; k++) if(!used[k] && g[j][k] < lowcost[k]) lowcost[k] = g[j][k]; } } int main(){ scanf("%d", &t); while(t--){ scanf("%d", &n); for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) scanf("%d", &g[i][j]); prim(); printf("%d\n", ans); } return 0; }
┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆