poj1789(prim)
prim和kruskal都是求解最小生成树的算法。这道题题意就是有N个字符串就是N个节点,而字符串之间的距离就是节点边的长度,求其最小生成树的边权和。
由于是第一次用prim,所以在求安全边的时候采用的是暴力的方法,所以我这个算法是O(n^2)的,跑了近1500ms,吓出一身冷汗……如果采用优先队列或者堆等数据结构应该会快,但是代码也会相应复杂了。
#include <iostream>
#include <string>
using namespace std; int n;
string str[];
int dis[][];
int key[];
bool visited[]; const int LEN = ; int calDis(string str1, string str2)
{
int ans = ;
for (int i = ; i < LEN; i++){
if (str1[i] != str2[i]){
ans++;
}
}
return ans;
} int prime()
{
int sum = ;
visited[] = true;
for (int i = ; i < n; i++){
key[i] = dis[][i];
}
for (int i = ; i < n; i++){
int min = ;
int index = ;
for (int j = ; j < n; j++){
if (!visited[j] && key[j] < min){
index = j;
min = key[j];
}
}
visited[index] = true;
sum += key[index];
for (int j = ; j < n; j++){
if (!visited[j] && dis[index][j] < key[j]){
key[j] = dis[index][j];
}
}
}
return sum;
} int main()
{
while (cin >> n && n){
memset(dis, , sizeof(dis));
memset(key, , sizeof(key));
memset(visited, , sizeof(visited));
for (int i = ; i < n; i++){
cin >> str[i];
}
for (int i = ; i < n; i++){
for (int j = i; j < n; j++){
int tmpDis = calDis(str[i], str[j]);
dis[i][j] = tmpDis;
dis[j][i] = tmpDis;
}
}
cout << "The highest possible quality is 1/" << prime() << '.' << endl;
}
return ;
}
poj1789(prim)的更多相关文章
- POJ-1789 Truck History---最小生成树Prim算法
题目链接: https://vjudge.net/problem/POJ-1789 题目大意: 用一个7位的string代表一个编号,两个编号之间的distance代表这两个编号之间不同字母的个数.一 ...
- 最小生成树Prim poj1258 poj2485 poj1789
poj:1258 Agri-Net Time Limit: 1000 MS Memory Limit: 10000 KB 64-bit integer IO format: %I64d , %I64u ...
- POJ1789 Truck History(prim)
题目链接. 分析: 最大的敌人果然不是别人,就是她(英语). 每种代表车型的串,他们的distance就是串中不同字符的个数,要求算出所有串的distance's 最小 sum. AC代码如下: #i ...
- POJ1789 Truck History 【最小生成树Prim】
Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18981 Accepted: 7321 De ...
- POJ1789:Truck History(Prim算法)
http://poj.org/problem?id=1789 Description Advanced Cargo Movement, Ltd. uses trucks of different ty ...
- ACM/ICPC 之 Prim范例(ZOJ1586-POJ1789(ZOJ2158))
两道Prim解法范例题型,简单的裸Prim,且两题相较以边为重心的Kruskal解法而言更适合以点为重心扩展的Prim解法. ZOJ1586-QS Network 题意:见Code 题解:直接的MST ...
- 最小生成树练习3(普里姆算法Prim)
风萧萧兮易水寒,壮士要去敲代码.本女子开学后再敲了.. poj1258 Agri-Net(最小生成树)水题. #include<cstdio> #include<cstring> ...
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...
- 最小生成树---Prim算法和Kruskal算法
Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...
随机推荐
- Codeforces 450B div.2 Jzzhu and Sequences 矩阵快速幂or规律
Jzzhu has invented a kind of sequences, they meet the following property: You are given x and y, ple ...
- git使用(1)----推送代码到远程
git使用(1) 首先要明白git上有三个区域 1.工作区 2.暂存区 3.历史记录区 步骤: 1.git init 2.配置环境(如果配置一次了以后就不用再继续配置) git config - ...
- 支付宝Android接口4.0以上报错Failure calling remote service
很坑爹的问题,4.0一下没问题,完全按照接口文件写的.网上一查,很多人遇到.最好直接在4.2下调试,看看报错问题,然后度娘. 将RSA文件中的加上“BC”后测试通过...NND PKCS8Encode ...
- 通过删除hbase表中的region来达到删除表中数据
公司最近在搞一个hbase删除数据,由于在建表的时候是通过region来对每日的数据进行存储的,所以要求在删除的时候直接通过删除region的来删除数据(最好的方案是只删除region中的数据,不把r ...
- 福建工程学院寒假作业第一周F题
Subsequence TimeLimit:1000MS MemoryLimit:65536K 64-bit integer IO format:%lld 问题描述: A sequence of ...
- CentOS7防火墙fiewall用法
CentOS7与以前常用的CentOS6还是有一些不同之处的,比如在设置开放端口的时候稍许有些不同,常用的iptables命令已经被 firewalld代替.这几天正好有在CentOS7系统中玩Sea ...
- Opencv 配置VS2012
开始接触图像处理有一段时间了,经过前期的调研,和相关入门知识的学习,开始接触一些图像处理应用的工具.Opencv是一个图像处理的开源库,由于其开放的协议架构,国内外很多科研机构和团队都在基于openc ...
- mac下 mysql / nginx 问题总汇
"ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)&q ...
- 55.Jump Game---dp
题目链接 题目大意:给一个数组,第i个位置的值表示当前可以往前走的最远距离,求从第一个位置能否顺利走到最后一个位置.例子如下: 法一(借鉴):DP,dp[i]表示从上一个位置走到当前位置时,剩余的可以 ...
- Machine Learning系列--L0、L1、L2范数
今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的L0.L1.L2和核范数规则化.最后聊下规则化项参数的选择问题.这里因为篇幅比较庞大,为了不吓到大家,我将这个五个 ...