POJ-1789 Truck History 裸最小生成树

来源:互联网 发布:散爆网络 编辑:程序博客网 时间:2024/06/08 05:12


题目链接


#include<stdio.h>#include<iostream>#include<string>#include<string.h>#include<math.h>#include<algorithm>#include<vector>#include<queue>using namespace std;const int maxn = 2005;const int inf = 1<<30;int n;int map[maxn][maxn],dis[maxn];bool vis[maxn];string str[maxn];int getDis( int a,int b ){int cnt = 0;for( int i = 0; i < str[a].length(); i ++ )if( str[a][i] != str[b][i] )cnt ++;return cnt;}int prime( int s ){int ans = 0;memset(vis,0,sizeof(vis));for( int i = 0; i < n; i ++ )dis[i] = map[s][i];vis[s] = true;for( int i = 1; i < n; i ++ ){int min = inf,p = s;for( int j = 0; j < n; j ++ )if( !vis[j] && dis[j] < min )min = dis[p=j];ans += min;vis[p] = true;for( int j = 0; j < n; j ++ ){if( dis[j] > map[p][j] )dis[j] = map[p][j];}}return ans;}int main(){    //freopen("data.txt","r",stdin);  while( scanf("%d",&n) != EOF,n ){for( int i = 0; i < n; i ++ )cin >> str[i];for( int i = 0; i < n; i ++ ){map[i][i] = 0;for( int j = i+1; j < n; j ++ )map[i][j] = map[j][i] = getDis( i,j );}printf("The highest possible quality is 1/%d.\n",prime(0));}    return 0;}


0 0