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 需 ...
随机推荐
- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-4_w0c665/PyQt5/
错误: 解决方式:输入一下命令 1 pip3 install --upgrade setuptools 2 python3 -m pip install --upgrade pip 输入命令: 1 p ...
- 小白也能搞定!Windows10上CUDA9.0+CUDNN7.0.5的完美安装教程
前言: 为什么要在本地电脑安装 CUDA,CUDA 是什么的,用来做什么?我想,点击标题进来的小伙伴,应该都清楚这些.不管你是用来做什么,或者跟我一样为了跑 Tensorflow 的 Object D ...
- JS优化技巧,解决冗余代码
1. 使用箭头函数简化函数定义 // 传统函数定义 function add(a, b) { return a + b; } // 箭头函数简化 const add = (a, b) => a ...
- 静态vlan的划分
静态vlan的划分 1,toupu图 2,配置id与子网掩码 2.1,pc,server的ip与子网配置 pc5 pc6 pc7 pc8 server1 server2 3,vlan的静态划分 1,v ...
- Gin中间件开发
Gin是一个用Go语言编写的Web框架,它提供了一种简单的方式来创建HTTP路由和处理HTTP请求.中间件是Gin框架中的一个重要概念,它可以用来处理HTTP请求和响应,或者在处理请求之前和之后执行一 ...
- [数据分析与可视化] Python绘制数据地图5-MovingPandas绘图实例
MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库,用于处理移动物体的轨迹数据.关于MovingPandas的使用见文章:MovingPandas入门指北,本文 ...
- vue3探索——组件通信之事件总线
Vue2.x使用EventBus进行组件通信,而Vue3.x推荐使用mitt.js. 比起Vue实例上的EventBus,mitt.js好在哪里呢?首先它足够小,仅有200bytes,其次支持全部事件 ...
- Kioptrix Level 1
Kioptrix这个系列靶机默认是桥接模式,如果我们kali使用NAT是扫描不到靶机的,通过VM的靶机网络设置也不能更改成功. 解决方式:每次下载好靶机先不导入VM,如果已经导入,需要"移除 ...
- 正则表达式快速入门一:正则表达式(regex)基本语法及概念
Regex quickstart :正则表达式快速入门 author: wclsn reference quick start 如果想要了解正则表达式的基本概念且英文ok的话,完全可以从我上面所附网站 ...
- KRPANO资源分析工具下载720YUN全景图
提示:目前分析工具中的全景图下载功能将被极速全景图下载大师替代,相比分析工具,极速全景图下载大师支持更多的网站(包括各类KRPano全景网站,和百度街景) 详细可以查看如下的链接: 极速全景图下载大师 ...