牛客1080D tokitsukaze and Event (双向最短路)
题目链接:https://ac.nowcoder.com/acm/contest/1080/D
首先建两个图,一个是权值为a的图,一个是权值为b的图。
从s起点以spfa算法跑权值为ai的最短路到t点,d1[ i ]数组就表示在权值为ai的图中,s点到i点的最短路。
再从t点为起点spfa算法跑权值为bi的最短路到s点,d2[ i ]数组表示在权值为bi的图中,t点到s点的最短路。
在节点i切换模式的最小伤害就是d1[ i ] + d2[ i ],倒着遍历取min即可。
AC代码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstring>
#define maxn 100005
#define inf 0x3f3f3f3f
using namespace std;
struct node{
vector<int> w;
vector<int> num;
}Ga[maxn],Gb[maxn];
long long int inq[maxn],inq2[maxn],d1[maxn],d2[maxn],ans[maxn];
void addedge(long long int u,long long int v,long long int a,long long int b){
Ga[u].num.push_back(v),Ga[u].w.push_back(a);
Ga[v].num.push_back(u),Ga[v].w.push_back(a);
Gb[v].num.push_back(u),Gb[v].w.push_back(b);
Gb[u].num.push_back(v),Gb[u].w.push_back(b);
}
void init(){
memset(d1,inf,sizeof(d1));
memset(d2,inf,sizeof(d2));
memset(inq,0,sizeof(inq));
memset(inq2,0,sizeof(inq2));
memset(ans,inf,sizeof(ans));
}//初始化
int main(){
int n,m,s,t;
scanf("%d%d",&n,&m);
for(int i = 0;i<m;i++){
long long int u,v,a,b;
scanf("%lld%lld%lld%lld",&u,&v,&a,&b);
addedge(u,v,a,b); //建两个图
}
init();
scanf("%d%d",&s,&t);
queue<int> q;
q.push(s);
inq[s] = 1,d1[s] = 0;
while(!q.empty()){
int now = q.front();
q.pop();
inq[now] = 0;
for(int i = 0;i<Ga[now].num.size();i++ ){
int vex = Ga[now].num[i];
if(d1[vex] > d1[now] + Ga[now].w[i] ){
d1[vex] = d1[now] + Ga[now].w[i];
if(inq[vex] == 1){
continue;
}
inq[vex] = 1;
q.push(vex);
}
}
}//第一遍spfa
queue<int> q2;
q2.push(t);
inq2[t] = 1,d2[t] = 0;
while(!q2.empty()){
int now = q2.front();
q2.pop();
inq2[now] = 0;
for(int i = 0;i<Gb[now].num.size();i++ ){
int vex = Gb[now].num[i];
if(d2[vex] > d2[now] + Gb[now].w[i]){
d2[vex] = d2[now] + Gb[now].w[i];
if(inq2[vex] == 1){
continue;
}
inq2[vex] = 1;
q2.push(vex);
}
}
}//第二遍spfa
for(int i = n;i>=0;i--){
ans[i] = min(ans[i+1],d1[i] + d2[i]);
}//倒着扫描 ans[i]就是在i点切换模式的最小伤害
for(int i = 1;i<=n;i++){
if(i == n){
printf("%lld",ans[i]);
return 0;
}
printf("%lld\n",ans[i]);
}
}
牛客1080D tokitsukaze and Event (双向最短路)的更多相关文章
- 牛客网 牛客小白月赛2 H.武-最短路(Dijkstra)
H.武 链接:https://www.nowcoder.com/acm/contest/86/H 这个题写的有点想发脾气,自己的板子垃圾了,这个题要用优先队列优化版的迪杰斯特拉的板子才可以过,但是自己 ...
- 牛客练习赛33 E tokitsukaze and Similar String (字符串哈希hash)
链接:https://ac.nowcoder.com/acm/contest/308/E 来源:牛客网 tokitsukaze and Similar String 时间限制:C/C++ 2秒,其他语 ...
- 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)
链接:https://ac.nowcoder.com/acm/contest/308/D 来源:牛客网 tokitsukaze and Inverse Number 时间限制:C/C++ 1秒,其他语 ...
- 牛客练习赛33 C tokitsukaze and Number Game (结论+字符串处理)
链接:https://ac.nowcoder.com/acm/contest/308/C 来源:牛客网 tokitsukaze and Number Game 时间限制:C/C++ 1秒,其他语言2秒 ...
- 牛客练习赛33 B tokitsukaze and RPG (类埃筛)
链接:https://ac.nowcoder.com/acm/contest/308/B 来源:牛客网 tokitsukaze and RPG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/ ...
- 牛客练习赛50 D tokitsukaze and Event (最短路,思维)
牛客练习赛50 D tokitsukaze and Event 链接:https://ac.nowcoder.com/acm/contest/1080/D来源:牛客网 时间限制:C/C++ 1秒,其他 ...
- tokitsukaze and Soldier 来源:牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28886/1004 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K, ...
- 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别
不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
随机推荐
- 安卓android eclipse运行提示no compatible targets were found
在eclipse中开发安卓应用,运行项目时,右击项目名称---Run As---Android Application时, 系统提示"No compatible targets were f ...
- JavaScript 13 Ajax技术(未完)
<body> <!-- 添加文档主体内容 --> <header> <nav>JavaScript - Ajax - 读取XML文件</nav&g ...
- 【笔记0-开篇】面试官系统精讲Java源码及大厂真题
背景 开始阅读 Java 源码的契机,还是在第一年换工作的时候,被大厂的技术面虐的体无完肤,后来总结大厂的面试套路,发现很喜欢问 Java 底层实现,即 Java 源码,于是我花了半年时间,啃下了 J ...
- yii2 分页
基于数据提供者 public function actionIndex() { $page = Yii::$app->get('page', 0); $modelClass = $this-&g ...
- Cow Contest POJ - 3660 floyd传递闭包
#include<iostream> #include<cstring> using namespace std; ,INF=0x3f3f3f3f; int f[N][N]; ...
- Wannafly Camp 2020 Day 2K 破忒头的匿名信 - AC自动机,dp
给定字典和文章,每个单词有价值,求写文章的最小价值 标准的 AC 自动机 dp,设 \(f[i]\) 表示写 \(s[1..i]\) 的最小价值,建立AC自动机后根据 trans 边暴力转移即可 建了 ...
- JFinal Enjoy指令扩展管理常用文本模板
个人博客 地址:http://www.wenhaofan.com/article/20190304102258 平时在项目中使用短信模板 邮件模板以及 站内消息通知等文本模板一般都是通过手动的字符串拼 ...
- HDU1312 Red and Black(dfs+连通性问题)
这有一间铺满方形瓷砖的长方形客房. 每块瓷砖的颜色是红色或者黑色. 一个人站在一块黑色瓷砖上, 他可以从这块瓷砖移动到相邻(即,上下左右)的四块瓷砖中的一块. 但是他只能移动到黑色瓷砖上,而不能移动到 ...
- resize函数
#include<opencv2/opencv.hpp>#include<opencv2/highgui.hpp> using namespace cv;using names ...
- hashlib加密模块_python
一.hashlib模块 1.功能 主要用于字符串加密 2.常用方法 md5()/sha1():创建一个md5或者sha1加密模式的hash对象update(arg):用字符串参数来更新hash对象,如 ...