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 需 ...
随机推荐
- Verilog实现奇分频电路
在FPGA中,计数器电路用途很广,一般计数器电路都可作为分频电路.实现占空比为50的偶分频电路很好实现.但实现占空比为50的奇分频电路有点难度.下面给出一个简单例子,记录学习奇分频电路的过程. 实现占 ...
- xfs文件系统核心架构介绍
版权声明:本文为CSDN博主「瞧见风」的原创文章,遵循CC 4.0 BY-SA版权协议原文链接:https://blog.csdn.net/scaleqiao/article/details/5209 ...
- (2023.8.28)Hi铁布衫-CM Ver 0.001 - Cracked-writeup
Hi铁布衫-CM Ver 0.001 WriteUp 本文作者:XDbgPYG(小吧唧) 发布时间:2023年8月28日 内容概要:Hi铁布衫-CM Ver 0.001 WriteUp 收集信息 有一 ...
- (洛谷P4213)杜教筛
https://www.cnblogs.com/Mychael/p/8744633.html #pragma GCC optimize(3, "Ofast", "inli ...
- mysql8关闭binlog并清空Binlog
编辑my.ini或者my.cnf文件 清空binlog信息 #查看现存的binlog文件列表 show master logs; #重置清空binlog文件 reset master; #重置清空后 ...
- 小知识:PPT的幻灯片放映设置
最近给某客户讲课时,碰到了幻灯片自动翻页的情况,发现是因为之前做过粗略的计时演练,有些片子就快速过了. 问题现象: 结果导致放映时也出现了某些片子快速被自动翻页. 解决方案: 设置成手动推进幻灯片的方 ...
- Jenkins持续集成入门到精通(入门篇)
1. 什么是持续集成 持续集成(Continuous integration,简称CI)指的是频繁将代码集成到主干.它的目的,就是让产品可以快速迭代,同时保持高质量.核心措施,代码集成到主干之前,必须 ...
- Lua5.3 笔记
Lua5.3 笔记 最近用skynet,sproto通讯,完全看不懂通讯二进制是怎么写的,发现都是string这个,string那个,完全理解不来. 于是查了一下string.pack的api,和之前 ...
- 入门篇-其之四-字符串String的简单使用
什么是字符串? 在Java编程语言中,字符串用于表示文本数据. 字符串(String)属于引用数据类型,根据String的源码,其头部使用class进行修饰,属于类,即引用数据类型. 字符串的表示 字 ...
- NineData SQL 窗口支持深色模式,让程序员不再怕长期用眼!
您有没有尝试过被明亮的显示器闪瞎眼的经历? 在夜间或低光环境下,明亮的界面会导致许多用眼健康问题,例如长时间使用导致的眼睛疲劳.干涩和不适感,同时夜间还可能会抑制褪黑素分泌,给您的睡眠质量带来影响. ...