#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. while(1) ; CPU 会一直等下去吗

    标题答疑 不会,计算机从外部设备读取数据到存储器,每读取1word的数据,CPU对外设状态进行一次检查. 可能有小伙伴看到这就要退出了,别急,看下去或许会有收获. 首先解决第一个问题:一个字是多少字节 ...

  2. 【技术积累】Linux中的命令行【理论篇】【二】

    ag命令 命令介绍 ag命令是一个用于在Linux系统中进行文本搜索的工具.它是基于Silver Searcher的改进版本,具有更快的搜索速度和更强大的功能. ag命令的基本用法是在指定的目录中搜索 ...

  3. c++中unique_ptr 的使用和理解

    unique_ptr 的使用 std::unique_ptr是c++11起引入的智能指针,为什么必须要在c++11起才有该特性,主要还是c++11增加了move语义,否则无法对对象的所有权进行传递. ...

  4. CVE-2020-0796 SMB远程代码执行漏洞复现

    前言: 这个windows的永恒之黑漏洞,不得不复现一下啦! 这个漏洞诸多大佬都已经复现了,现在跟随大佬的脚步,逐个复现一下: 可参考:https://www.adminxe.com/1220.htm ...

  5. Programming abstractions in C阅读笔记:p88-p90

    <Programming Abstractions In C>学习第44天,p88-p90总结. 一.技术总结 1.内存分配 内存分配可以分为:static allocation.auto ...

  6. WPF学习 - 闭坑(持续更新)

    坑1:自定义控件设计原则: 既然称之为控件,那么就必定有界面与行为两部分. 界面就是展示给用户看的,用于承载类的属性.方法.事件等. 行为就是类的方法,以及这些方法需要用到的属性.字段等. WPF设计 ...

  7. QA|20221001|SecureCRT自动断开怎么办?

    Q:SecureCRT自动断开怎么办? A:如下设置

  8. Java开发面试--Redis专区

    1. 什么是Redis?它的主要特点是什么? 答: Redis是一个开源的.基于内存的高性能键值对存储系统.它主要用于缓存.数据存储和消息队列等场景. 高性能:Redis将数据存储在内存中,并采用单线 ...

  9. 入门篇-其之四-字符串String的简单使用

    什么是字符串? 在Java编程语言中,字符串用于表示文本数据. 字符串(String)属于引用数据类型,根据String的源码,其头部使用class进行修饰,属于类,即引用数据类型. 字符串的表示 字 ...

  10. 【matplotlib 实战】--平行坐标系

    平行坐标系是一种统计图表,它包含多个垂直平行的坐标轴,每个轴表示一个字段,并用刻度标明范围.通过在每个轴上找到数据点的落点,并将它们连接起来形成折线,可以很容易地展示多维数据.随着数据增多,折线会堆叠 ...