POJ 1789 Truck History 最小生成树模板题

来源:互联网 发布:大拿韩代 知乎 编辑:程序博客网 时间:2024/06/05 21:55
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#define inf 0x3f3f3fusing namespace std;char s[2100][10];int a[2100][2100];int dis[2100];int book[2100];int main(){    int n;    int i, j, k;    while(~scanf("%d", &n)){        if(n == 0)  break;        memset(a,0,sizeof(a));        memset(book,0,sizeof(book));        for(i = 0;i < n;i++){            scanf("%s", s[i]);        }        for(i = 0;i < n;i++){            for(j = i+1;j < n;j++){                for(k = 0;k <7;k++){                    if(s[i][k] != s[j][k]){                        a[i+1][j+1]++;                        a[j+1][i+1]++;                    }                }            }        }        for(i = 1;i <= n;i++){            dis[i] = a[1][i];        }        int sum = 0;        int cnt = 1;        int min;        book[1] = 1;        while(cnt < n){            min = inf;            for(i = 1;i <= n;i++){                if(!book[i]&&dis[i] < min){                    min = dis[i];                    j = i;                }            }            sum += min;            cnt++;            book[j] = 1;            for(k = 1;k <= n;k++){                if(!book[k] &&dis[k] > a[j][k]){                    dis[k] = a[j][k];                }            }        }        printf("The highest possible quality is 1/%d.\n", sum);    }    return 0;}

0 0
原创粉丝点击