L3-011 直捣黄龙
#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 直捣黄龙的更多相关文章
- 配置 L3 agent - 每天5分钟玩转 OpenStack(99)
上一节我们介绍了路由服务(Routing)的基本功能,今天教大家如何配置. Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 fir ...
- Neutron 理解 (6): Neutron 是怎么实现虚拟三层网络的 [How Neutron implements virtual L3 network]
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)
本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...
- Time.MONTH及Calendar.MONTH 默认的月份为 0-11
Time.MONTH及Calendar.MONTH 默认的月份为 0-11 所以使用的时候要自己加1.
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数011,ocr,字符识别
<zw版·Halcon-delphi系列原创教程> Halcon分类函数011,ocr,字符识别 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
- PAT天梯赛练习题 L3-011. 直捣黄龙(多关键字SPFA+DFS)
L3-011. 直捣黄龙 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题是一部战争大片 —— 你需要从己方大本营出发,一路 ...
- php大力力 [011节] PHP常量使用场景
2015-08-24 php大力力011. PHP常量使用场景 $root = "dali"; define("ROOT",10) echo "ROO ...
- [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 ...
- [反汇编练习] 160个CrackMe之011
[反汇编练习] 160个CrackMe之011. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- Neutron路由篇:L3 agent+Namespace
Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 firewall 和 floating ip 服务. l3 agent 需 ...
随机推荐
- while(1) ; CPU 会一直等下去吗
标题答疑 不会,计算机从外部设备读取数据到存储器,每读取1word的数据,CPU对外设状态进行一次检查. 可能有小伙伴看到这就要退出了,别急,看下去或许会有收获. 首先解决第一个问题:一个字是多少字节 ...
- 【技术积累】Linux中的命令行【理论篇】【二】
ag命令 命令介绍 ag命令是一个用于在Linux系统中进行文本搜索的工具.它是基于Silver Searcher的改进版本,具有更快的搜索速度和更强大的功能. ag命令的基本用法是在指定的目录中搜索 ...
- c++中unique_ptr 的使用和理解
unique_ptr 的使用 std::unique_ptr是c++11起引入的智能指针,为什么必须要在c++11起才有该特性,主要还是c++11增加了move语义,否则无法对对象的所有权进行传递. ...
- CVE-2020-0796 SMB远程代码执行漏洞复现
前言: 这个windows的永恒之黑漏洞,不得不复现一下啦! 这个漏洞诸多大佬都已经复现了,现在跟随大佬的脚步,逐个复现一下: 可参考:https://www.adminxe.com/1220.htm ...
- Programming abstractions in C阅读笔记:p88-p90
<Programming Abstractions In C>学习第44天,p88-p90总结. 一.技术总结 1.内存分配 内存分配可以分为:static allocation.auto ...
- WPF学习 - 闭坑(持续更新)
坑1:自定义控件设计原则: 既然称之为控件,那么就必定有界面与行为两部分. 界面就是展示给用户看的,用于承载类的属性.方法.事件等. 行为就是类的方法,以及这些方法需要用到的属性.字段等. WPF设计 ...
- QA|20221001|SecureCRT自动断开怎么办?
Q:SecureCRT自动断开怎么办? A:如下设置
- Java开发面试--Redis专区
1. 什么是Redis?它的主要特点是什么? 答: Redis是一个开源的.基于内存的高性能键值对存储系统.它主要用于缓存.数据存储和消息队列等场景. 高性能:Redis将数据存储在内存中,并采用单线 ...
- 入门篇-其之四-字符串String的简单使用
什么是字符串? 在Java编程语言中,字符串用于表示文本数据. 字符串(String)属于引用数据类型,根据String的源码,其头部使用class进行修饰,属于类,即引用数据类型. 字符串的表示 字 ...
- 【matplotlib 实战】--平行坐标系
平行坐标系是一种统计图表,它包含多个垂直平行的坐标轴,每个轴表示一个字段,并用刻度标明范围.通过在每个轴上找到数据点的落点,并将它们连接起来形成折线,可以很容易地展示多维数据.随着数据增多,折线会堆叠 ...