POJ 1789 权值为字符串差值的最小生成树
来源:互联网 发布:大疆官网模拟软件p 编辑:程序博客网 时间:2024/05/22 18:22
Truck History
Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 24751 Accepted: 9647
Description
Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks are used for vegetable delivery, other for furniture, or for bricks. The company has its own code describing each type of a truck. The code is simply a string of exactly seven lowercase letters (each letter on each position has a very special meaning but that is unimportant for this task). At the beginning of company's history, just a single truck type was used but later other types were derived from it, then from the new types another types were derived, and so on.
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.
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
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
The 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
For 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
4aaaaaaabaaaaaaabaaaaaaabaaaa0
Sample Output
The highest possible quality is 1/3.
变相求最小生成树,两个点之间权值为两个字符串不同字符的个数,求最小生成树权值的倒数
#include<cstdio>#include<algorithm>#include <iostream>using namespace std;const int maxn = 2000+10;char map[maxn][10];int f[maxn];int n,cnt;struct edge{ int u,v; int w;}e[maxn*maxn/2];int dist(int st, int en){ int distance = 0; for(int i = 0; i < 7; i++) if(map[st][i] != map[en][i]) distance++; return distance;}bool cmp(edge a, edge b){ return a.w < b.w;}int find(int x){ return x == f[x] ? x : f[x] = find(f[x]);}int Kruskal(){ int ans = 0; for(int i = 1; i <= n; i++) f[i] = i; sort(e,e+cnt,cmp); for(int i = 0; i < cnt; i++) { int u = find(e[i].u); int v = find(e[i].v); if(u != v) { f[v] = u; ans += e[i].w; } } return ans;}int main(){ while(scanf("%d", &n) != EOF) { if(n == 0) break; for(int i = 1; i <= n; i++) scanf("%s", map[i]); cnt = 0; for(int i = 1; i < n; i++) { for(int j = i+1; j <= n; j++) { e[cnt].u = i; e[cnt].v = j; e[cnt].w = dist(i,j); //把字符串差值变权值 cnt++; } } int ans = Kruskal(); printf("The highest possible quality is 1/%d.\n", ans); } return 0;}
0 0
- POJ 1789 权值为字符串差值的最小生成树
- POJ 3522 最大边与最小边差值最小的生成树
- POJ 3522 最大边与最小边差值最小的生成树(最小生成树的性质)
- POJ3522差值最小的生成树
- POJ 3522 Slim Span(最小差值生成树)
- Poj 3522 最长边与最短边差值最小的生成树
- PKU3522(Slim Span)-求差值最小的生成树
- NOIP 边权差值最小的生成树(小数据)
- 【POJ】最小差值
- poj3522求一棵生成树使最大的边和最小的边差值最小
- poj3522(求最大边最小边差值最小的生成树)
- POJ3522Slim Span(最大边与最小边差值最小的生成树)
- Slim Span 求一颗生成树 使得最大边与最小边的差值最小
- poj 1789(最小生成树)
- poj 1789 最小生成树
- poj 1789 最小生成树
- Kruskal 最小生成树(输出最小生成树的路径,权值的和) 参考poj 1258
- poj3522 Slim Span 最长边与最短边差值最小的生成树,kruskal算法 + 暴力枚举
- SG 博弈论 hdu 1760 A New Tetris Game
- <script>标签不能自闭合
- MapReduce:随机生成100个小数并求最大值
- ubuntu 14.04 安装设置ssh远程连接服务
- Day4、进制的转换、运算符(位操作符)
- POJ 1789 权值为字符串差值的最小生成树
- HashMap源码分析
- Java 中的内部类
- NKOI 1938 最小路径覆盖
- Catch That Cow<poj3278>
- 判断进程是否"以管理员身份运行"
- Linux网络命令--last和lastlog命令
- POJ2674运动碰撞模拟
- POJ 1125 Stockbroker Grapevine