http://wikioi.com/problem/1079/

单源最短路径,可以用dijkstra来做。这里采用了heap优化,复杂度是(V+E)logV。这里用了STL的优先队列(堆),重复加入pair没有问题,因为dist小的会先出来。为了避免重复扩展,用了visit判重,这个也不是必须的。
注意的是:
1.pair使用的时候,把距离放在first的位置,那么在priority queue里,距离小的会先出来。
2.priority_queue<pp, vector<pp>, greater<pp> > que;这样定义,小的先出来。
3.使用graph[from][to] ?来判断是否用from=>to这条路。

#include <iostream>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include <utility>
#include <climits>
#include <functional>
using namespace std; #define pp pair<int, char> int main()
{
int n;
cin >> n;
map<char, map<char, int> > graph; // 'A'-'Z', 'a'-'z'
map<char, int> dist;
set<char> visit;
for (int i = 0; i < n; i++) {
char from, to;
int weight;
cin >> from >> to >> weight;
graph[from][to] = min(weight, graph[from][to] ? graph[from][to]: INT_MAX);
graph[to][from] = min(weight, graph[to][from] ? graph[to][from]: INT_MAX);
} int ans = INT_MAX;
char ansc;
priority_queue<pp, vector<pp>, greater<pp> > que;
dist['Z'] = 0;
que.push(pp(0, 'Z')); while (!que.empty()) {
pp edge = que.top();
que.pop();
int weight = edge.first;
char node = edge.second;
if (visit.count(node) != 0) continue;
visit.insert(node);
for (map<char,int>::iterator it = graph[node].begin();
it != graph[node].end(); it++) {
if (!dist.count(it->first) ||
it->second + dist[node] < dist[it->first]) {
// add to que
dist[it->first] = it->second + dist[node];
que.push(pp(dist[it->first], it->first));
if (ans > dist[it->first] && it->first >= 'A' && it->first < 'Z') {
ans = dist[it->first];
ansc = it->first;
}
}
}
} cout << ansc << " " << ans << endl;
return 0;
}

  

[wikioi]回家的更多相关文章

  1. flhs笔试题-回家上机实践

    这是最近参加的一个公司的笔试题,回家上机写了下代码,希望对有需要的小伙伴有用,简单实现字符串和数组在指定位置的插入: package org.flhs; import com.google.commo ...

  2. 三石推荐!把 Bootstrap 小清新带回家!

    无敌传送门:http://fineui.com/demo_pro/default.aspx?theme=bootstrap1&menu=accordion   喜欢就来赞一个! 把麻烦留给三石 ...

  3. 不写完不让回家的JQuery的事件与动画

    在这看不见太阳的小黑屋里,苦逼的一天又开始了 好了闲话我也就不扯了,接下来我就来说说我对jQuery事件和动画的理解吧!!! 还是得再扯两句,我们敬爱的,Y老师讲完了,jQuery事件和动画,对着我们 ...

  4. 魔法禁书目录2:回家(codevs 3024)

    题目描述 Description 大妈打完三战回家,我知道他是怎么回来的,欧洲到日本有L个站点他决定乘坐恰好n次飞机(不是学院都市的超音速飞机)和m次火车来从第一个站点到达最后一个站点.但是有一点很重 ...

  5. 【wikioi】1041 Car的旅行路线

    题目链接 算法:最短路(数据弱,Floyd也能过) 惨痛的教训:此题我至少提交了20次,原因在于= =太草率和粗心了,看到那个多少组数据以为是城市的数量,导致数组开得小小的= =.(对不起,wikio ...

  6. 【wikioi】1040 统计单词个数

    题目链接 算法:划分型DP PS:被卡过3天.日期:2013-10-10 ~ 2013-10-12 18:52:48 这题是我提交了13次AC= =汗= = 题目描述: 给出一个长度不超过200的由小 ...

  7. iphone6 帶回家”活動!

    十一小長假即將來臨,周向榮還準備窩在家裏坐等“鋒菲戀”的後續結果嗎?雖然宅男無罪,但是請不要繼續在論壇裏高呼“李亞鵬娶了張柏芝”等口號,放下你“不吐槽會死星人”的特質,走出家門去領略一下祖國的大好山河 ...

  8. [wikioi 1418]铃仙•优昙华院稻叶(东方幻想乡系列模拟赛)(树上递推)

    题目:http://www.wikioi.com/problem/1418/ 分析: 一看就肯定是树上的递推 设f[i][j][k]表示第i秒在k点(从j点走过来的)的概率 则f[i][j][k]=f ...

  9. [wikioi 1307][poj 2054]欧少堆(乱搞)

    题目:http://www.wikioi.com/problem/1307/ 题意:给你一个树,上面有n个节点,每个节点都有一个价值p,求一个n个节点的排列顺序,是的Σi*p[i]最小(要求父节点一定 ...

随机推荐

  1. Adapter 适配器模式

    将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 目标接口(Target):客户所期待的接口.目标可以是具体的或抽象的类,也可 ...

  2. C# Quartz.Net 定时任务的简单使用

    最近做了一个定时执行任务的软件. 执行任务时,会使用log4net记录日志,如果执行任务有异常,则发送邮件给指定的对象. 我做的是每天的9点和16点执行一次任务,以此记录: 首先,获得Quartz.N ...

  3. Eclipse搭建服务器

    一.首先,依次点击Window -->preferences-->Server-->Runtime environment -->add,再选择Apache,选择TOMcat的 ...

  4. 0基础学习ios开发笔记第一天

    Ios操作 界面操作 快捷键 command + c 复制 command+v 粘贴 command +a 全选 command +s 保存 command +z 撤销 command +x  剪切 ...

  5. google模拟各种Android手机浏览器方法

    在开始--运行 输入 chrome.exe --user-agent="Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/ ...

  6. cyark - 数字方舟(看侣行第三季时发现的)

    数字方舟 Ben Kacyra

  7. linux管道学习(二)

    int main() { char* pipename = "pipe"; mkfifo(pipename,); int pid = fork(); ) { printf(&quo ...

  8. 关于C++几个容易混淆的概念总结

    1.函数指针和指针函数 函数指针说的就是一个指针,但这个指针指向的函数,不是普通的基本数据类型或者类对象.函数指针的定义: int (*func)(int a, int b); // 声明函数指针 指 ...

  9. Inline functions

    Problems: (Page 372) There are two problems with the use of proprocessor macros in C++. The first is ...

  10. Nginx中让 重写后的路径 自动增加斜线 /

    http://www.111cn.net/sys/nginx/56067.htm(参考文章) 现在有个这样的需求,在重写的url地址后,自动加斜线 / 例如 xx.com/abc/1-2  (默认ur ...