poj-1789 Truck History

来源:互联网 发布:会员php系统源码 编辑:程序博客网 时间:2024/04/26 01:47

http://poj.org/problem?id=1789

题意理解就是裸的MST

#include<cstdio>#include<iostream>#include<cstring>#define INF 0x3f3f3f3fusing namespace std;char str[2010][10];int dis[2010],edge[2010][2010];bool vis[2010];int m,ans;int cmp(int x,int y){    int cnt=0;    for(int i=0;i<7;i++)    {        if(str[x][i]!=str[y][i])            cnt++;    }    return cnt;}int prim(){    int u=0,tmp;ans = 0;    memset(vis,false,sizeof(vis));    for(int i=0;i<m;i++)    {        dis[i]=edge[u][i];    }    vis[u]=1;    for(int j=1;j<m;j++)    {        tmp=INF;        for(int i=1;i<m;i++)        {            if(!vis[i] && dis[i]<tmp)            {                tmp = dis[i];                u = i;            }        }        vis[u]=1;        ans+=tmp;        for(int i=0;i<m;i++)        {            if(!vis[i] && edge[u][i]<dis[i])                dis[i]=edge[u][i];        }    }    return ans;}int main(){    while(scanf("%d",&m)!=EOF)    {        if(m==0) break;        for(int i=0;i<m;i++)            for(int j=0;j<m;j++)        {            if (i == j)                edge[i][j] = 0;            else                edge[i][j] = INF;        }        for(int i=0;i<m;i++)            scanf("%s",str[i]);        for(int i=0;i<m;i++)        {            for(int j=0;j<m;j++)            {                if(i==j)                    edge[i][j]=edge[j][i]=0;                else                    edge[i][j]=edge[j][i]=cmp(i,j);            }        }        printf("The highest possible quality is 1/%d.\n",prim());    }    return 0;}



0 0