Truck History(prime)
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 31871 | Accepted: 12427 |
Description
Today, ACM is rich enough to pay historians to study its history.
One thing historians tried to find out is so called derivation plan --
i.e. how the truck types were derived. They defined the distance of
truck types as the number of positions with different letters in truck
type codes. They also assumed that each truck type was derived from
exactly one other truck type (except for the first truck type which was
not derived from any other type). The quality of a derivation plan was
then defined as
1/Σ(to,td)d(to,td)
where the sum goes over all pairs of types in the derivation plan such that to is the original type and td the type derived from it and d(to,td) is the distance of the types.
Since historians failed, you are to write a program to help them.
Given the codes of truck types, your program should find the highest
possible quality of a derivation plan.
Input
input consists of several test cases. Each test case begins with a line
containing the number of truck types, N, 2 <= N <= 2 000. Each of
the following N lines of input contains one truck type code (a string of
seven lowercase letters). You may assume that the codes uniquely
describe the trucks, i.e., no two of these N lines are the same. The
input is terminated with zero at the place of number of truck types.
Output
each test case, your program should output the text "The highest
possible quality is 1/Q.", where 1/Q is the quality of the best
derivation plan.
Sample Input
4
aaaaaaa
baaaaaa
abaaaaa
aabaaaa
0
Sample Output
The highest possible quality is 1/3.
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define N 2010
#define M 10 char str[N][M];//放字符串
int n;//结点数
int vis[N],dst[N],map[N][N]; //vis访问数组,dst放各点到MST的最小距离 int finddst(int i,int j)//找两字符串字符不同的列数
{
int num=0,k; for (k=0;k<7;k++)
{
if(str[i][k]!=str[j][k])
{
num++;
}
}
return num;
} void init()
{
int j,i; memset(vis,0,sizeof(vis));//访问数组初始
for (i=0;i<n;i++)//初始化图
{
for (j=0;j<n;j++)
{
if (i==j)
{
map[i][j]=0;
} map[i][j]=finddst(i,j);
}
}
} void prime()
{
int i,j,min,point,ans=0; vis[0]=1;//0点放入MST
for (i=0;i<n;i++)//dst初始化
{
dst[i]=map[i][0];
} for (i=1;i<n;i++)
{
min=N;
for (j=0;j<n;j++)//找距MST最近的点
{
if (vis[j]==0&&min>dst[j])
{
min=dst[j];
point=j;
}
} if (min==N)//不连通情况
{
break;
} vis[point]=1;//把该点放入MST
ans=ans+dst[point]; for (j=0;j<n;j++)//更新各点到MST的最小距离
{
if (vis[j]==0&&dst[j]>map[point][j])
{
dst[j]=map[point][j];
}
}
} printf("The highest possible quality is 1/%d.\n",ans);
} int main()
{
int i,j; while (scanf("%d",&n)&&n)
{
for (i=0;i<n;i++)
{
scanf("%s",&str[i]);
} init();
prime();
} return 0;
}
Truck History(prime)的更多相关文章
- POJ 1789 Truck History (最小生成树)
Truck History 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/E Description Advanced Carg ...
- Truck History(最小生成树)
poj——Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27703 Accepted: 10 ...
- POJ 1789 -- Truck History(Prim)
POJ 1789 -- Truck History Prim求分母的最小.即求最小生成树 #include<iostream> #include<cstring> #incl ...
- poj 1789 Truck History(最小生成树)
模板题 题目:http://poj.org/problem?id=1789 题意:有n个型号,每个型号有7个字母代表其型号,每个型号之间的差异是他们字符串中对应字母不同的个数d[ta,tb]代表a,b ...
- 【POJ 1789】Truck History(最小生成树)
题意:距离定义为两个字符串的不同字符的位置个数.然后求出最小生成树. #include <algorithm> #include <cstdio> #include <c ...
- History(历史)命令用法
如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的用法. 使用 HISTTIMEFORMAT 显示时间 ...
- History(历史)命令用法15例
导读 如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率,本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFOR ...
- [转] Linux History(历史)命令用法 15 例
[From]https://linuxtoy.org/archives/history-command-usage-examples.html 如果你经常使用 Linux 命令行,那么使用 histo ...
- History(历史)命令用法 15 例
如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT ...
随机推荐
- c# 将秒数转换成时,分,秒的方法
TimeSpan ts = , ,Convert.ToInt32( duration)); string str = ""; ) { str = ts.Hours.ToString ...
- UML 运用于开发过程——总结
UML -- 统一的图形语言 用例图:需求捕获,测试依据类图:静态系统结构对象图:对象之间的关联构件图:构件之间的关联部署图:构建的物理部署 以上几种图的作用:描述系统结构 顺序图:捕获时间顺序协作图 ...
- 浅谈Java——泛型DAO
首先解释一下为什么要学习泛型DAO.平时在写DAO的时候是一个接口对应一个实现类,实现类里面要写很多的操作数据库的方法.当我们有很多的javaben的时候我们会写很多的接口和实现类,并且里面的代码都是 ...
- 梯度下降法实现最简单线性回归问题python实现
梯度下降法是非常常见的优化方法,在神经网络的深度学习中更是必会方法,但是直接从深度学习去实现,会比较复杂.本文试图使用梯度下降来优化最简单的LSR线性回归问题,作为进一步学习的基础. import n ...
- 使用 Azure CLI 创建和管理 Linux VM
Azure 虚拟机提供完全可配置的灵活计算环境. 本教程介绍 Azure 虚拟机的基本部署项目,例如选择 VM 大小.选择 VM 映像和部署 VM. 你将学习如何执行以下操作: 创建并连接到 VM 选 ...
- [UI] 精美UI界面欣赏[6]
精美UI界面欣赏[6]
- Linux 系统安装[Ubuntu]
1.1.1. 安装Ubuntu 下载链接[Ubuntu16.04.1-64bit-Desktop版]: http://old-releases.ubuntu.com/releases/16.04.1/ ...
- Linux系统锁定关键文件
锁定系统关键文件 1.密码.账号文件 chattr +i /etc/passwd /etc/group /etc/shadow /etc/gshadow /etc/inittab 加锁:chattr ...
- springsource-tool-suite插件的在线安装
1 首先,确定你现在使用的eclipse属于哪个版本? 查看自己的eclipse平台的版本(我的eclipse平台版本是4.3) 2 根据eclipse版本,选择插件的版本 官网:ht ...
- 网络编程--Socket(套接字)
网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中 有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后 如何可靠高效的进行数据传输.在 ...