Truck History POJ
来源:互联网 发布:美工培训讲师简介 编辑:程序博客网 时间:2024/06/04 13:01
/**n个车牌号,刚开始只有一个车牌,其他车牌都是由一个车牌直接或间接产生一个车牌到另一个车牌的产生权值是它们之间的字母不同的个数问产生的最小的边权和prim 最小生成树*/#include<cstdio>#include<cmath>#include<cstring>using namespace std;const int inf=0x3f3f3f3f;const int maxn=2e3+7;int dis[maxn],mmp[maxn][maxn],ans,val[maxn];bool vis[maxn];int n,m;char str[maxn][maxn];void build_map(){ for(int i=1;i<n;i++) { for(int j=i+1;j<=n;j++) { int sum=0,len=strlen(str[i]); for(int k=0;k<len;k++) if(str[i][k]!=str[j][k]) sum++; mmp[i][j]=mmp[j][i]=sum; } }}void prim(){ ans=0; for(int i=1;i<=n;i++) { dis[i]=mmp[1][i]; vis[i]=0; } vis[1]=1; for(int i=1;i<=n;i++) { int k=-1; double Min=inf; for(int j=1;j<=n;j++) { if(!vis[j]&&dis[j]<Min) { Min=dis[j]; k=j; } } if(k==-1) break; vis[k]=1; ans+=Min; for(int j=1;j<=n;j++) if(!vis[j]&&dis[j]>mmp[k][j]) dis[j]=mmp[k][j]; } printf("The highest possible quality is 1/%d.\n",ans) ;}int main (){ while(~scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i==j) mmp[i][j]=0; else mmp[i][j]=inf; for(int i=1;i<=n;i++) scanf("%s",str[i]); build_map(); prim(); } return 0;}
阅读全文
0 0
- POJ 1789 Truck History
- POJ 1789 Truck History
- POJ 1789 Truck History
- poj 1789 Truck History
- poj 1789 Truck History
- Poj 1789 Truck History
- poj 1789 Truck History
- poj 1789 Truck History
- poj 1789 Truck History
- poj 1789 Truck History
- POJ-1789-Truck History
- poj-1789-Truck History
- POJ 1789 Truck History
- poj 1789 Truck History
- POJ 1789 Truck History
- POJ 1789 Truck History
- POJ 1789 Truck History
- POJ 1789 Truck History
- (转)Deep Learning(深度学习)学习笔记整理系列之(四)
- (C语言)循环与递归求斐波那契数
- 项目:停车场
- maven项目导入到Eclipse项目和IDEA项目
- vultr+ss-libev+hiwifi
- Truck History POJ
- 17.11.28,web学习第十四天,还有一年,努力吧青年HttpServletResponse
- 5.4.0 RegExp类型
- TCP与UDP的区别
- (转)Deep Learning(深度学习)学习笔记整理系列之(五)
- 哲♂学集锦
- 用宏实现两个数的大小比较
- 生成二维码的源码
- Unity3D问题之简单UI框架设计和实现