USACO 2014 US Open Dueling GPS's /// SPFA
题目大意:
给定n个点m条边的有向图
有两个GPS 分别认为 A[i]到B[i] 的一条边的花费是P[i]、Q[i]
当当前走的边不是GPS认为的最短路上的边就会被警告
即两个GPS都不认为是最短路上的边时 会被警告两次
求从点1走到点n被警告次数最少是多少次
https://blog.csdn.net/oakley_/article/details/52510465
按P[i]反向建图 再从n跑最短路到1 然后遍历所有的边判断将不是最短路的边C[i]+1
Q[i]也同样 最后按C[i]从1跑最短路到n 得到的就是被最少警告的次数
为什么要反向建图跑最短路?
因为导航系统到了点2 点3 点4...之后仍然要导航到目标点n
那么就变成了点2到点n的最短路 点3到点n的最短路 ...
所以反向是要使得求出dis[i]为 点i到点n的最短路
若是正向会是 点1到点n的最短路 与要求不符
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define gcd(i,j) __gcd(i,j)
#define mem(i,j) memset(i,j,sizeof(i))
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define dec(i,j,k) for(int i=j;i>=k;i--)
const int N=1e4+;
const int M=1e5+; int n,m,C[M];
int A[M],B[M],P[M],Q[M]; struct NODE { int to,len,nt; }e[M];
int head[N], tot;
void init() { tot=; mem(head,); }
void addE(int u,int v,int w) {
e[tot].to=v; e[tot].len=w;
e[tot].nt=head[u]; head[u]=tot++;
} int dis[N];
bool inq[N];
void SPFA(int s) {
mem(dis,INF);
queue<int>q;
while(!q.empty()) q.pop();
dis[s]=; q.push(s);
while(!q.empty()) {
int u=q.front(); q.pop();
inq[u]=;
for(int i=head[u];i;i=e[i].nt) {
int v=e[i].to;
if(dis[v]<=dis[u]+e[i].len) continue;
dis[v]=dis[u]+e[i].len;
if(!inq[v]) inq[v]=, q.push(v);
}
}
} void check(int u[],int v[],int w[],int st) {
init();
inc(i,,m) addE(u[i],v[i],w[i]);
SPFA(st);
inc(i,,m) if(dis[v[i]]!=dis[u[i]]+w[i]) C[i]++;
} int main()
{
while(~scanf("%d%d",&n,&m)) {
inc(i,,m) scanf("%d%d%d%d",&A[i],&B[i],&P[i],&Q[i]);
mem(C,);
check(B,A,P,n);
check(B,A,Q,n);
check(A,B,C,);
printf("%d\n",dis[n]);
} return ;
}
USACO 2014 US Open Dueling GPS's /// SPFA的更多相关文章
- 【BZOJ】3538: [Usaco2014 Open]Dueling GPS(spfa)
http://www.lydsy.com/JudgeOnline/problem.php?id=3538 题意不要理解错QAQ,是说当前边(u,v)且u到n的最短距离中包含这条边,那么这条边就不警告. ...
- USACO Dueling GPS's
洛谷 P3106 [USACO14OPEN]GPS的决斗Dueling GPS's 洛谷传送门 JDOJ 2424: USACO 2014 Open Silver 2.Dueling GPSs JDO ...
- BZOJ3538: [Usaco2014 Open]Dueling GPS
3538: [Usaco2014 Open]Dueling GPS Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 59 Solved: 36[Subm ...
- Luogu P3106 [USACO14OPEN]GPS的决斗Dueling GPS's(最短路)
P3106 [USACO14OPEN]GPS的决斗Dueling GPS's 题意 题目描述 Farmer John has recently purchased a new car online, ...
- USACO翻译:USACO 2014 DEC Silver三题
USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...
- USACO翻译:USACO 2014 FEB SILVER 三题
USACO 2014 FEB SILVER 一.题目概览 中文题目名称 自动打字 路障 神秘代码 英文题目名称 auto rblock scode 可执行文件名 auto rblock scode 输 ...
- USACO翻译:USACO 2014 JAN三题(2)
USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recordi ...
- USACO翻译:USACO 2014 JAN三题(1)
USACO 2014 JAN 一.题目概览 中文题目名称 滑雪场设计 滑雪降速 滑雪场评级 英文题目名称 skidesign slowdown skilevel 可执行文件名 skidesign sl ...
- USACO翻译:USACO 2014 MARCH Silver三题
USACO 2014 MARCH 一.题目概览 中文题目名称 农田灌溉 懒牛 牛叫 英文题目名称 irrigation lazy mooomoo 可执行文件名 irrigation lazy mooo ...
随机推荐
- Qt 程序在 Windows 下的发布
本文讨论在 Windows 平台下编译成功的 Qt 程序,如何在未配置 Qt 开发环境的 Windows 平台下独立运行的方法. 经过验证发现,在 Ubuntu 平台下编译成功的程序可在未安装 Qt ...
- make源文件时出现 /usr/bin/ld: cannot find -lstdc++ 错误
解决CentOS 7 中,make源文件时出现 /usr/bin/ld: cannot find -lstdc++ 错误 在CentOS 7中,使用static方法编译,需要安装static vers ...
- 安装软件 学习linux命令
nm -D /usr/lib64/libstdc++.so.6 | grep GLIBCnm dumps named symbols, -D for dynamic libs, and grep fo ...
- 十万级百万级数据量的Excel文件导入并写入数据库
一.需求分析 最近接到一个需求,导入十万级,甚至可能百万数据量的记录了车辆黑名单的Excel文件,借此机会分析下编码过程; 首先将这个需求拆解,发现有三个比较复杂的问题: 问题一:Excel文件导入后 ...
- System.Net.Mail.SmtpException:不允许使用邮箱名称.
使用SmtpClient发送邮件的时候,出现了如题错误. 解决方案: 将 SmtpClient.UseDefaultCredentials 属性设置为 true . 官方文档说明: Some SM ...
- 波兰语 polish
There are several systems for encoding the Polish alphabet for computers. All letters of the Polish ...
- 使用Makefile编译Erlang
#配置选项,可以是DEBUG和RELEASE CONFIG ?= RELEASE #语言配置,可以是chs(简体中文).cht(繁体中文)等等 Region ?= chs #源文件目录 SOURCE_ ...
- jquery 选项卡切换 带背景图片
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- 1.初步了解IOC容器
学习地址:腾讯课堂 https://ke.qq.com/course/28986?_bid=167&_wv=3&from=iosapp 1.什么是IOC容器 定义: 1.是一个可以 ...
- java基础学习笔记三(多态)
多态? 多态是同一个行为具有多个不同表现形式或形态的能力. 存在的必要条件 继承 重写 父类引用指向子类对象 比如: Parent p = new Child(); 当使用多态方式调用方法时,首先检查 ...