#include<bits/stdc++.h>

using namespace std;

using pii = pair<int, int>;

const int N = 300;
vector<pair<int, int>> g[N];
int have[N];
int pre[N];
int path[N];
bool st[N];
int dist[N];
int n, k;
int Kill[N];
int jiefang[N];
string start, endd;
unordered_map<string, int> var;
unordered_map<int, string> local; void dijkstra() {
// memset(st, 0, sizeof st);
memset(dist, 0x3f, sizeof dist);
dist[var[start]] = 0;
priority_queue<pii, vector<pii>, greater<pii>> heap;
heap.push({dist[var[start]], var[start]});
path[var[start]] = 1;
while (heap.size()) {
auto t = heap.top();
heap.pop();
int u = t.second;
//cout << "u == " << u << " " << local[u] << "\n";;
if (st[u]) continue;
st[u] = true;
for (auto itr : g[u]) {
int v = itr.first, w = itr.second;
// cout << "v" << " = " << v << " " << local[v] << "\n";
//if (local[v] == "DBY") cout << "kaishi = " << "Kill " << Kill[v] << " jiefang " << jiefang[v] << "\n";
if (dist[v] > dist[u] + w) {
pre[v] = u;
Kill[v] = Kill[u] + have[v];
jiefang[v] = jiefang[u] + 1;
dist[v] = dist[u] + w;
heap.push({dist[v], v});
// cout << "---新更" << local[v] << " " << local[u] << "\n";
path[v] = path[u];
// cout << path[v] << " " << path[u] << "\n";
} else if (dist[v] == dist[u] + w) {
if (jiefang[v] < jiefang[u] + 1) {
pre[v] = u;
jiefang[v] = jiefang[u] + 1;
Kill[v] = Kill[u] + have[v];
} else if (jiefang[v] == jiefang[u] + 1) {
if (Kill[v] < Kill[u] + have[v]) {
pre[v] = u;
Kill[v] = Kill[u] + have[v];
}
}
// cout << "---" << local[v] << " " << local[u] << "\n";
// cout << path[v] << " " << path[u] << "\n";
path[v] += path[u];
}
//if (local[v] == "DBY") cout << "jieshu = " << "Kill " << Kill[v] << " jiefang " << jiefang[v] << "\n";
//cout << "pre " << local[v] << " = " << local[pre[v]] << "\n";
}
//cout << "\n\n";
} int ed = var[endd];
int edd = ed;
int sta = var[start];
//cout << local[ed] << " " << local[st] << "\n";
vector<string> res;
while (ed != sta) {
res.push_back(local[ed]);
//cout << local[ed] << "\n";
ed = pre[ed];
}
res.push_back(local[sta]);
for (int i = res.size() - 1; i >= 0; i--) {
cout << res[i];
if (i != 0) cout << "->";
}
cout << "\n";
//cout << local[ed] << "\n";
//cout <<
// cout << path[var["ATP"]] << "\n";
// cout << path[var["PTA"]] << "\n";
// cout << path[var["PMS"]] << "\n";
// cout << path[var["LNN"]] << "\n";
// cout << path[var["PDS"]] << "\n";
// cout << path[var["TAP"]] << "\n";
// cout << path[var["DBY"]] << "\n";
cout << path[edd] << " ";
cout << dist[edd] << " "; //距离正确s
cout << Kill[edd] << "\n";
} int main() {
//map<int, int> have;
cin >> n >> k;
cin >> start >> endd;
int id = 1;
var[start] = id, local[id] = start, id++;
var[endd] = id, local[id] = endd, id++;
for (int i = 1; i <= n - 1; i++) {
string s;
int cnt;
cin >> s >> cnt;
if (var.count(s)) have[var[s]] = cnt;
else {
var[s] = id;
local[id] = s;
have[id] = cnt;
id++;
}
} for (int i = 0; i < k; i++) {
string a, b;
int w;
cin >> a >> b >> w;
int vara = var[a], varb = var[b];
g[vara].push_back({varb, w}); //a -> b w
g[varb].push_back({vara, w});
} dijkstra(); return 0;
}

L3-011 直捣黄龙的更多相关文章

  1. 配置 L3 agent - 每天5分钟玩转 OpenStack(99)

    上一节我们介绍了路由服务(Routing)的基本功能,今天教大家如何配置. Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 fir ...

  2. Neutron 理解 (6): Neutron 是怎么实现虚拟三层网络的 [How Neutron implements virtual L3 network]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  3. 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  4. Time.MONTH及Calendar.MONTH 默认的月份为 0-11

    Time.MONTH及Calendar.MONTH 默认的月份为  0-11 所以使用的时候要自己加1.

  5. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数011,ocr,字符识别

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数011,ocr,字符识别 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...

  6. PAT天梯赛练习题 L3-011. 直捣黄龙(多关键字SPFA+DFS)

    L3-011. 直捣黄龙 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题是一部战争大片 —— 你需要从己方大本营出发,一路 ...

  7. php大力力 [011节] PHP常量使用场景

    2015-08-24 php大力力011. PHP常量使用场景 $root = "dali"; define("ROOT",10) echo "ROO ...

  8. [Freescale]Freescale L3.14.52_1.1.0 yocto build

    可参照:http://blog.csdn.net/wince_lover/article/details/51456745 1. Refer to <基于i.mx6处理器的Yocto项目及Lin ...

  9. [反汇编练习] 160个CrackMe之011

    [反汇编练习] 160个CrackMe之011. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  10. Neutron路由篇:L3 agent+Namespace

    Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 firewall 和 floating ip 服务.     l3 agent 需 ...

随机推荐

  1. Mysql高级4-索引的使用规则

    一.最左前缀法则 如果索引了多列(联合索引),要遵守最左前缀法则.最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索引将部分失效(后面的字段索引失效) 示例1:acco ...

  2. 行行AI人才直播第14期:【国内第二波人工智能进入者、连续创业者】土豆《土豆利用GPT成功融资两次的提示词和故事》

    行行AI人才(海南行行智能科技有限公司)是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 此刻,ChatGPT的火热程度已经无需多言.一时间,追逐大模型成了国内AI行业的标准动作,&quo ...

  3. Django: 获取头信息

    如何获取请求头信息 使用如下函数request.META.get("HTTP_请求头函数"),需要注意的是,请求头变量需要全部大写. 其他注意事项如下所示: 如果headerkey ...

  4. python=2.7-not available from current channels

    现象 使用miniconda3创建python2的环境 Collecting package metadata (current_repodata.json): done Solving enviro ...

  5. 谈谈 Kafka 的幂等性 Producer

    使用消息队列,我们肯定希望不丢消息,也就是消息队列组件,需要保证消息的可靠交付.消息交付的可靠性保障,有以下三种承诺: 最多一次(at most once):消息可能会丢失,但绝不会被重复发送. 至少 ...

  6. FlinkSQL类型系统

    类型有什么作用, 类型可以提供编译期检查, 避免到运行期才报错. 类型 首先Flink中自己定义了一套类型, 有LogicalType和DataType两个表示 LogicalType Logical ...

  7. 关于预处理器 sass 的超全用法

    随着用户需求的增加,应用于页面的 css 代码越来越复杂越发臃肿难以维护,但是又没有 css 的替代品,css 预处理器作为 css 的扩展,出现在前端技术中. sass 是 css 预处理器中常用的 ...

  8. 《Pro Git》Git基础笔记

    获取Git仓库 在已存在目录中初始化仓库 $ git init 该命令会创建一个名为.git的隐藏文件. 克隆现有的仓库 $ git clone <url> # 例如 git clone ...

  9. 使用redis pipeline提升性能

    前言 本篇来介绍一下redis pipeline,主要是由于最近一次在帮开发同学review代码的时候,发现对redis有个循环操作可以优化.场景大概是这样的,根据某个uid要从redis查询一批数据 ...

  10. 园子的脱困努力-云厂商合作:领取阿里云免费ECS试用资源,部署Java Web环境,送小礼品

    在园子脱困的关键时期,每一笔收入都很重要,一边在会员救园,一边我们要努力把握每一个商务合作机会,争取早日走出困境. 之前园子维持生存的收入主要来自于与云厂商的合作,但去年由于云厂商推广策略的调整,这块 ...