poj 1789
http://poj.org/problem?id=1789
这是一道图论的题,个人觉得和那个POJ1258是差不多的,就是多了一步,题目难以读懂
题目的意思:就是给你一群字符串要你找字符串对应的字符不同,使得这个字符串与其他字符串不同
举个例子,不然题目也确实看不懂,
4
a b a a a b a
b a a a a b a
b a a b b a b
a b a a a a a
以第一个为主的与其他行不同的字母数分别为:0 2 6 1
以第二个为主的与其他行不同的字母数分别为:2 0 4 3
以第三个为主的与其他行不同的字母数分别为:6 4 0 5
以第四个为主的与其他行不同的字母数分别为:1 3 5 0
所求的最短的不是2+6+1=9;
而应该是 1+2+4,这才是最短的,这就是prim。
而所谓的prim,就是首先以一个节点作为最小生成树的初始节点,然后以迭代的方式找出与最小生成树中各节点权重最小的边。
用代码来解释是比较好的。
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <string> using namespace std; #define inf 100007
char str[][];
int dis[],n,ans,mp[][];
bool vis[];
void creatmp()
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
ans=;
for(int k=;k<;k++)
if(str[i][k]!=str[j][k]) ans++;
mp[i][j]=ans;
}
} bool prim()
{
ans=;
for(int i=;i<=n;i++) //对dis进行初始化,这里的dis指的就是两个字符串对应位置的字符的不同总值。
dis[i]=inf;
dis[]=; //因为相同字符串是相同的,所以这个为0。
for(int i=;i<=n;i++)
{
int tmp=inf;int k=;
for(int j=;j<=n;j++)
if(vis[j]&&dis[j]<tmp) //找出dis最小的,并记录。
{
tmp=dis[j];
k=j;
}
if(tmp==inf) return false;
ans+=tmp;
vis[k]=false;
for(int j=;j<=n;j++) //用dis来记录每一列。
if(vis[j]&&dis[j]>mp[k][j])
dis[j]=mp[k][j];
}
return true;
} int main()
{
while(scanf("%d",&n)&&n!=)
{
memset(vis,true,sizeof(vis));
for(int i=;i<=n;i++)
scanf("%s",str[i]);
creatmp();
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
printf("%d ",mp[i][j]);
printf("\n");}
prim();
printf("The highest possible quality is 1/%d.\n",ans);
}
}
poj 1789的更多相关文章
- poj 1789 prime
链接:Truck History - POJ 1789 - Virtual Judge https://vjudge.net/problem/POJ-1789 题意:先给出一个n,代表接下来字符串的 ...
- 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 (Kruskal)
题目链接:POJ 1789 Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks ...
- poj 1789 Truck History
题目连接 http://poj.org/problem?id=1789 Truck History Description Advanced Cargo Movement, Ltd. uses tru ...
- poj 1789 Truck History(最小生成树)
模板题 题目:http://poj.org/problem?id=1789 题意:有n个型号,每个型号有7个字母代表其型号,每个型号之间的差异是他们字符串中对应字母不同的个数d[ta,tb]代表a,b ...
- poj 1789 Truck History(kruskal算法)
主题链接:http://poj.org/problem?id=1789 思维:一个一个点,每两行之间不懂得字符个数就看做是权值.然后用kruskal算法计算出最小生成树 我写了两个代码一个是用优先队列 ...
- POJ 1789 Truck History (Kruskal 最小生成树)
题目链接:http://poj.org/problem?id=1789 Advanced Cargo Movement, Ltd. uses trucks of different types. So ...
- (最小生成树)Truck History --POJ -- 1789
链接: http://poj.org/problem?id=1789 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2213 ...
随机推荐
- safari 回调中window.open无法执行
safari无法在callback中执行window.open,其安全机制将其阻挡了. 解决方法: var oWinRef = win.open('','_blank','参数');fCallback ...
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
一个普通的实体Person: private int id; private String name; private Date createdTime;...//其它字段// get set方法 . ...
- vim does not map customized key?
it is a long time confusing me that why my customized key map in vim does not work? Some vim configu ...
- php:Header
转自鸟哥的博客: http://www.laruence.com/2007/12/16/308.html PHP header()the function declaration: void head ...
- admin site
基本步骤: 1.添加 'django.contrib.admin' 到 INSTALL_APP 设置中. 2.再添加四个依赖项: 'django.contrib.auth', 'django.cont ...
- [译]Mongoose指南 - Document
更新 有几种方式更新document. 先看一下传统的更新方法 Tank.findById(id, function(err, tank){ if(err) return handleError(er ...
- R语言 常见模型
转自 雪晴网 [R]如何确定最适合数据集的机器学习算法 抽查(Spot checking)机器学习算法是指如何找出最适合于给定数据集的算法模型.本文中我将介绍八个常用于抽查的机器学习算法,文中还包括各 ...
- windows下PHP+Mysql+Apache环境搭建
Apache版本:httpd-2.2.22-win32-x86-openssl- 下载地址:http://pan.baidu.com/s/1sjuL4RV PHP版 ...
- hessian接口参数,子类与父类不能有同名字段解决方法
hessian默认是使用 com.caucho.hessian.io.JavaSerializer 序列化,同名字段子类字段值被赋值两次,最终用父类null值赋给了子类同名字段,解决方法就是 指定序列 ...
- 如何给wordpress外部链接自动添加nofollow
wordpress多作者博客可以丰富网站的内容,但同时也会产生一些无关的链接,例如有些投机的人会考虑在文章中随意添加外部链接,如果你不想给这些外部链接传递权重,你需要给这些外部链接加上 rel=&qu ...