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 ...
随机推荐
- Python开发【第四篇】:Python基础之函数
三元运算 三元运算(三目运算),是对简单的条件语句的缩写. ? 1 2 3 4 5 # 书写格式 result = 值1 if 条件 else 值2 # 如果条件成立,那么将 “值1” 赋值给 ...
- svn三大目录trunk、branch和tag
SVN中Branch和tag的比较在SVN中Branch和tag在一个功能选项中,在使用中也往往产生混淆.在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般 ...
- mysql 定义function rand
MySQL获取随机数 如何通过MySQL在某个数据区间获取随机数? MySQL本身提供一个叫rand的函数,返回的v范围为0 <= v < 1.0. 介绍此函数的MySQL文档也介绍道 ...
- 说说C#的async和await(转)
一个简单的例子: public class MyClass { public MyClass() { DisplayValue(); //这里不会阻塞 System.Diagnostics.Debug ...
- 导航菜单:jQuery粘性滚动导航栏效果
粘性滚动是当导航在滚动过程中会占粘于浏览器上,达到方便网站页面浏览的效果,也是一种用户体验,下面我们看一下是怎么实现的: jQuery的 smint插件,也是一个导航菜单固定插件.当页滚动时,导航菜单 ...
- [译]git reset
git reset 如果说git revert是一个安全的撤销方式, 那么git reset就是一个非常危险的方法了. 当你使用git reset撤销的时候, 你没有可能在回到最初了-他是一个永久的不 ...
- 关于R中的mode()和class()的区别
本文原创,转载请注明出处,本人Q1273314690(交流学习) 说明:本文曾经在15年11月在CSDN发过,但是由于CSDN不支持为知笔记的发布为博客的API功能,所以,自今天起,转移到博客园(幸好 ...
- plink远程连接服务器进行编译
脚本命令: echo y|D:\remote_link\plink -l user -pw password 172.16.0.101 "export LANG=en_US;cd / ...
- 用CSS画个三角形
<!DOCTYPE html> <html> <head> <style type="text/css"> #trangle { d ...
- js表单元素checked、radio被选中的几种方式-遁地龙卷风
0.环境 <input type="checkbox" value="lol"/>lol var lol = document.getElemen ...