poj 2485 最小生成树
算法:
又是裸得最小生成树。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; struct node { int a, b, num; bool operator < ( const node& A) const { return num < A.num; } }edge[4100000]; int N, e, set[2100], mp[510][510]; int find( int x ) { return x == set[x] ? x : set[x] = find(set[x]); } void merge( int x, int y) { set[x] = y; } void Krusal( ) { int sum = 0; sort( edge, edge + e); for( int i = 0; i < e; i++) { int x = find(edge[i].a); int y = find(edge[i].b); if( x != y ) { merge(x, y); if( edge[i].num > sum ) sum = edge[i].num; } } printf("%d\n",sum); } int main( ) { int T; scanf("%d",&T); while(T-- ) { e = 0; scanf("%d",&N); for( int i = 1; i <= N; i++) { set[i] = i; } for( int i = 1; i <= N; i++) for( int j = 1; j <= N; j++) scanf("%d",&mp[i][j]); for( int i = 1; i <= N; i++) { for( int j = 1; j <= i; j++) { if( i != j ) { edge[e].a = i; edge[e].b = j; edge[e++].num = mp[i][j]; } } } Krusal(); } return 0; }
posted on 2012-07-12 10:02 more think, more gains 阅读(150) 评论(0) 编辑 收藏 举报