rt,超级大水题,连邻接矩阵都给出来了,求最小生成树的最大边。。。
继续用kruscal切掉。。。
代码:
#include <cstdio> #include <algorithm> using namespace std; const int maxn = 500; struct Edge{ int x, y, w; }; Edge e[maxn*maxn]; int f[maxn]; int v[maxn][maxn]; int find(int x) { if (x != f[x]) return f[x] = find(f[x]); return x; } bool cmp(Edge a, Edge b) { return a.w < b.w; } int main() { int t, n; int i, j, cnt, tmp, lg, sel; // freopen("in", "r", stdin); scanf("%d", &t); while (t--) { scanf("%d", &n); cnt = 0; for (i = 0; i < n; i++) { f[i] = i; for (j = 0; j < n; j++) if (scanf("%d", &tmp) && i > j) { e[cnt].x = i; e[cnt].y = j; e[cnt].w = tmp; cnt++; }//if }//for sel = 0; lg = 0; sort(e, e + cnt, cmp); for (i = 0; i < cnt; i++) { int a, b; a = find(e[i].x); b = find(e[i].y); if (a != b) { f[a] = b; if (lg < e[i].w) lg = e[i].w; if (++sel == n - 1) break; }//if }//for printf("%d\n", lg); }//while return 0; }