poj 1789 Truck History

点击打开链接poj 1789

思路:最小生成树+prime

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 2010
#define INF 0xFFFFFFF

int n;
char ch[MAXN][10];
int vis[MAXN];
int lowcost[MAXN];
int G[MAXN][MAXN];

void init(){
    memset(vis , 0 , sizeof(vis));
    memset(lowcost , 0 , sizeof(lowcost));
    for(int i = 1 ; i <= n ; i++){
       for(int j = i+1 ; j <= n ; j++){
           int tmp = 0;
           for(int k = 0 ; k < 7 ; k++){
              if(ch[i][k] != ch[j][k])
                  tmp++;
           }
           G[i][j] = G[j][i] = tmp;
       }
    }
}

void prime(){
     int ans , pos;
     ans = 0;
     vis[1] = 1;
     for(int i = 1 ; i <= n ; i++)
         lowcost[i] = G[1][i];
     for(int i = 1 ; i <= n ; i++){
        pos = -1;
        for(int j = 1 ; j <= n ; j++){
           if(!vis[j] && (pos == -1 || lowcost[j] < lowcost[pos]))
               pos = j;
        }
        if(pos == -1)
          break;
        vis[pos] = 1;
        ans += lowcost[pos];
        for(int j = 1 ; j <= n ; j++){
           if(!vis[j] && lowcost[j] > G[j][pos])
               lowcost[j] = G[j][pos];
        }
     }
     printf("The highest possible quality is 1/%d.\n" , ans);
}

int main(){
    while(scanf("%d%*c" , &n) && n){
        for(int i = 1 ; i <= n ; i++)
           scanf("%s%*c" , ch[i]);
        init();
        prime();
    }
    return 0;
}
时间: 2024-08-02 03:25:38

poj 1789 Truck History的相关文章

POJ 1789 Truck History:最小生成树 Prim

Truck History:http://poj.org/problem?id=1789 大意:用一个7位的string代表一个编号,两个编号之间的距离代表这两个编号之间不同字母的个数.一个编号只能由另一个编号变化的来,变化的字母的数量就是这两个编号之间相应的距离,现在要找出一个变化方案,使得总代价最小,也就是距离之和最小. 思路:将每个字符串当成一个节点,求出每个节点之间需要变化的次数为边的权值,用Prim建立最小生成树(稠密图). 更多精彩内容:http://www.bianceng.cnh

poj 1789 Truck History MST

   prim /* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <queue> #define

最小生成树【完结】

第一题 hdu 1232 畅通工程 点击打开hdu 1232 思路:模板题 点击查看代码 第二题 hdu 1233 还是畅通工程 点击打开hdu 1233 思路:模板题 点击查看代码 第三题 uva 10034 Freckles 点击打开uva 10034 思路:模板题 点击查看代码 第四题 uva 10397 Connect the Campus 点击打开uva 10397 思路:模板题 点击查看代码 第五题 uva 10369 Arctic Network 点击打开uva 10369 思路:

POJ题目分类

初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      (4)递推.      (5)构造法.(poj3295)      (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:      (1)图的深度优先遍历和广度优先遍历.      (2)最短路径算法(dijkstra,bellman-ford

SVN 中的 truck、branch 和 tag

问题 使用 SVN 进行项目的版本管理时, truck(主干).branch(分支) 和 tag(标签) 是如何区别?何时使用他们? branch/tag 版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上.这条线被称为 branch. branch 经常被用来试验新的功能,而不会对开发有编译错误的干扰.当新的功能足够稳定之后,开发品的 branch 就可以 merge(合并)回 主branch(trunk). 版本控制系统的另一个特性是能够标记特殊的版本(例如某个发布版本)

History of UNIX Project Build Tools

版权声明:本文为博主原创文章,未经博主允许不得转载. History of UNIX Project Build Tools   (The following is derived from the HACKING.txt file of the old open source project which I stopped supporting many years ago. R.I.P.) You might have noticed above that there are SIX STE

poj系统训练计划

转载:http://www.cnblogs.com/silveryelf/archive/2011/10/29/2228681.html 初级: 基本算法: 枚举:1753    2965 贪心:1328    2109    2586 构造:3295 模拟:1068    2632    1573    2993    2996 图: 最短路径:1860    3259    1062    2253    1125    2240 最小生成树:1789    2485    1258    

Backbone.js系列教程八:Backbone.History

Backbone.Router的功能是管理路由.Backbone.history是路由的一部分,负责监听和响应URL变化,包含浏览器历史的更新.Backbone.history()构造函数由Backbone库本身实例化,History()的一个实例是引用Backbone.history.这个Backbone.history对象有一个命名为start()的方法.调用这个方法通告Backbone开始监听路由并管理浏览器历史.该方法有一个选项对象提供下面的选项和值. Backbone.history.

javascript history: javascript学习-HISTORY

History对象是用来把窗口的浏览历史用文档和文档状态列表的形式方法,常用方法:forward();//前进back();//后退go(number);//前进或后退指定步数注意:如何窗口包含多个子窗口,子窗口的浏览历史会按时间顺序穿插在主窗口的历史中. 本文链接http://www.cxybl.com/html/wyzz/JavaScript_Ajax/20130522/37951.html