poj 2485 Highways(Kruskal!)

 

哈哈~~这次写kruskal 完全自己写的 没有参照以前写的 哈哈~~不容易。。。

 

求出得出的最小生成树上最长的路长,小变形而已。HITS提示用scanf。。我试试cin,超时了,改成scanf AC。。。

 

#include <stdio.h> #include <stdlib.h> #include <iostream> #define N 510 using namespace std; int n,p,pre[N]; struct c { int x,y,len; }city[N*N]; typedef struct c NODE; int cmp(const void *a, const void *b) { return ((NODE*)a)->len > ((NODE*)b)->len ? 1 : -1; } void input() { int i,j; scanf("%d",&n); p = 0; for(i=1; i<=n; i++) for(j=1; j<=n; j++) { scanf("%d",&city[p].len); city[p].x = i; city[p].y = j; p++; } } int find(int x) { while(x!= pre[x]) x = pre[x]; return x; } void kruskal() { int i,a,b,min; qsort( city, p, sizeof(NODE), cmp); for(i=1; i<=n; i++) pre[i] = i; min = 0; for(i=0; i<p; i++) { a = find( city[i].x ); b = find( city[i].y ); if( a!= b ) { if( city[i].len > min ) min = city[i].len; pre[b] = a; } } cout << min <<endl; } int main(void) { int ncases; scanf("%d",&ncases); while( ncases-- ) { input(); kruskal(); } return 0; }

 

你可能感兴趣的:(poj 2485 Highways(Kruskal!))