POJ 1789 Truck History【最小生成树简单应用】
链接:
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 14950 | Accepted: 5714 |
Description
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.
Input
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
Sample Input
4
aaaaaaa
baaaaaa
abaaaaa
aabaaaa
0
Sample Output
The highest possible quality is 1/3.
Source
题意:
算法:最小生成树
思路:
Kruskal:
1789 | Accepted | 22860K | 563MS | C++ | 1378B |
//Accepted 22860 KB 579 ms C++ 1302 B 2013-07-31 09:37:35
#include<stdio.h>
#include<algorithm>
using namespace std; const int maxn = 2000+10;
char map[maxn][10];
int p[maxn];
int n,m; struct Edge{
int u,v;
int w;
}edge[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 == p[x] ? x : p[x] = find(p[x]);
} int Kruskal()
{
int ans = 0;
for(int i = 1; i <= n; i++) p[i] = i;
sort(edge,edge+m,cmp); for(int i = 0; i < m; i++)
{
int u = find(edge[i].u);
int v = find(edge[i].v); if(u != v)
{
p[v] = u;
ans += edge[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]); m = 0;
for(int i = 1; i <= n; i++)
{
for(int j = i+1; j <= n; j++)
{
edge[m].u = i;
edge[m].v = j;
edge[m++].w = dist(i,j);
}
} int ans = Kruskal();
printf("The highest possible quality is 1/%d.\n", ans);
}
return 0;
}
Prime:
Accepted | 15672K | 454MS | C++ | 1289B | 2013-07-31 09:38:56 |
//Accepted 15672 KB 469 ms C++ 1227 B 2013-07-31 09:37:25
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; const int maxn = 2000+10;
const int INF = maxn*7; char map[maxn][10];
int w[maxn][maxn];
int d[maxn];
int vis[maxn];
int n; 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;
} int Prime()
{
int ans = 0;
for(int i = 1; i <= n; i++) d[i] = INF;
d[1] = 0;
memset(vis, 0, sizeof(vis)); for(int i = 1; i <= n; i++)
{
int x, m = INF;
for(int y = 1; y <= n; y++) if(!vis[y] && d[y] <= m) m = d[x=y];
vis[x] = 1; ans += d[x];
for(int y = 1; y <= n; y++) if(!vis[y])
d[y] = min(d[y], w[x][y]);
}
return ans;
}
int main()
{
while(scanf("%d", &n) != EOF)
{
if(n == 0) break; for(int i = 1; i <= n; i++) scanf("%s", map[i]); for(int i = 1; i <= n; i++)
{
for(int j = i+1; j <= n; j++)
{
w[i][j] = dist(i,j);
w[j][i] = w[i][j];
}
} int ans = Prime();
printf("The highest possible quality is 1/%d.\n", ans);
}
return 0;
}
POJ 1789 Truck History【最小生成树简单应用】的更多相关文章
- poj 1789 Truck History 最小生成树
点击打开链接 Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15235 Accepted: ...
- poj 1789 Truck History 最小生成树 prim 难度:0
Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19122 Accepted: 7366 De ...
- Kuskal/Prim POJ 1789 Truck History
题目传送门 题意:给出n个长度为7的字符串,一个字符串到另一个的距离为不同的字符数,问所有连通的最小代价是多少 分析:Kuskal/Prim: 先用并查集做,简单好写,然而效率并不高,稠密图应该用Pr ...
- 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 Truck History Description Advanced Cargo Movement, Ltd. uses tru ...
- POJ 1789 Truck History (最小生成树)
Truck History 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/E Description Advanced Carg ...
- poj 1789 Truck History【最小生成树prime】
Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21518 Accepted: 8367 De ...
- POJ 1789 Truck History (Kruskal)
题目链接:POJ 1789 Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks ...
- POJ 1789 Truck History (Kruskal 最小生成树)
题目链接:http://poj.org/problem?id=1789 Advanced Cargo Movement, Ltd. uses trucks of different types. So ...
随机推荐
- Openerp图片路径处理
Openerp目前存储图片如人力资源头像图片等都是以二进制的方式存储在数据库中,若要修改数据库里只存储路径可以用这种方法 Image 装饰器: Image装饰器包含3中图片显示 Image 大图片 i ...
- Android Exception 16(Error in ADT 23 Update)
http://stackoverflow.com/questions/24445367/error-in-adt-23-update http://stackoverflow.com/question ...
- JavaScript | 基础表单验证(纯Js)
———————————————————————————————————————————— 基础表单验证(纯js) - - - - - - - - - - - - - - - - - - - - - - ...
- Android Volley框架的几种post提交请求方式
首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Vol ...
- MaterialUp 官方client源代码
Material Design MaterialUp 官方client源代码 https://github.com/jariz/MaterialUp
- iOS:一个Cell中设置另外一个Cell中的button
场景: 子类化Cell中有button,拥有选中式样,点击第一个Cell中的button后,Cell一中的button获得选中式样.可是当点击Cell二中的button时.Cell一中的button选 ...
- rxjs1
<li *ngFor="let fruit of fruitsList; let i = index;">{{i}}-{{fruit.name}}-{{fruit.pr ...
- Arthas安装问题
1. 下载安装 方式一: 安装Arthas: curl -L https://alibaba.github.io/arthas/install.sh | sh 启动Arthas: ./as.sh 报t ...
- URAL 1750 Pakhom and the Gully 计算几何+floyd
题目链接:点击打开链接 gg.. . #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cs ...
- HTML里面的文本标签
以下就是重要的标签: <html></html> 创建一个HTML文档,是网页源码的開始符和结束符,每一个网页的源码必然是以这两个标签開始和结束. <head>&l ...