USACO Dueling GPS's
洛谷 P3106 [USACO14OPEN]GPS的决斗Dueling GPS's
JDOJ 2424: USACO 2014 Open Silver 2.Dueling GPSs
Description
Problem 2: Dueling GPS's [Brian Dean, 2014]
Farmer John has recently purchased a new car online, but in his haste he
accidentally clicked the "Submit" button twice when selecting extra
features for the car, and as a result the car ended up equipped with two
GPS navigation systems! Even worse, the two systems often make conflicting
decisions about the route that FJ should take.
The map of the region in which FJ lives consists of N intersections
(2 <= N <= 10,000) and M directional roads (1 <= M <= 50,000). Road i
connects intersections A_i (1 <= A_i <= N) and B_i (1 <= B_i <= N).
Multiple roads could connect the same pair of intersections, and a
bi-directional road (one permitting two-way travel) is represented by two
separate directional roads in opposite orientations. FJ's house is located
at intersection 1, and his farm is located at intersection N. It is
possible to reach the farm from his house by traveling along a series of
directional roads.
Both GPS units are using the same underlying map as described above;
however, they have different notions for the travel time along each road.
Road i takes P_i units of time to traverse according to the first GPS unit,
and Q_i units of time to traverse according to the second unit (each
travel time is an integer in the range 1..100,000).
FJ wants to travel from his house to the farm. However, each GPS unit
complains loudly any time FJ follows a road (say, from intersection X to
intersection Y) that the GPS unit believes not to be part of a shortest
route from X to the farm (it is even possible that both GPS units can
complain, if FJ takes a road that neither unit likes).
Please help FJ determine the minimum possible number of total complaints he
can receive if he chooses his route appropriately. If both GPS units
complain when FJ follows a road, this counts as +2 towards the total.
Input
* Line 1: The integers N and M.
Line i describes road i with four integers: A_i B_i P_i Q_i.
Output
* Line 1: The minimum total number of complaints FJ can receive if he
routes himself from his house to the farm optimally.
Sample Input
5 7 3 4 7 1 1 3 2 20 1 4 17 18 4 5 25 3 1 2 10 1 3 5 4 14 2 4 6 5
Sample Output
1
HINT
INPUT DETAILS:
There are 5 intersections and 7 directional roads. The first road connects
from intersection 3 to intersection 4; the first GPS thinks this road takes
7 units of time to traverse, and the second GPS thinks it takes 1 unit of
time, etc.
OUTPUT DETAILS:
If FJ follows the path 1 -> 2 -> 4 -> 5, then the first GPS complains on
the 1 -> 2 road (it would prefer the 1 -> 3 road instead). However, for
the rest of the route 2 -> 4 -> 5, both GPSs are happy, since this is a
shortest route from 2 to 5 according to each GPS.
题目大意:
给你一个N个点的有向图,可能有重边.
有两个GPS定位系统,分别认为经过边i的时间为Pi,和Qi.
每走一条边的时候,如果一个系统认为走的这条边不是它认为的最短路,就会受到警告一次T T
两个系统是分开警告的,就是说当走的这条边都不在两个系统认为的最短路范围内,就会受到2次警告.
如果边(u,v)不在u到n的最短路径上,这条边就受到一次警告,求从1到n最少受到多少次警告。
题解:
3遍SPFA 打到我吐血。
我不想讲了。
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#define inf 0x3f3f3f
using namespace std;
struct edge{
int w,to,next;
}e1[201100];
edge e2[201100];
edge e3[201100];
int head1[101100],head2[101100],head3[101100];
int d1[101100],d2[101100],d3[101100];
int f1[101100],f2[101100];
int n,en1,en2,en3,m;
void add1(int v,int u,int w){
en1++;
e1[en1].to=v;
e1[en1].w=w;
e1[en1].next=head1[u];
head1[u]=en1;
}
void add2(int v,int u,int w){
en2++;
e2[en2].to=v;
e2[en2].w=w;
e2[en2].next=head2[u];
head2[u]=en2;
}
void add3(int u,int v,int w){
en3++;
e3[en3].to=v;
e3[en3].w=w;
e3[en3].next=head3[u];
head3[u]=en3;
}
void sp1(int s){
queue<int> q;
int inq[20010];
memset(inq,0,sizeof(inq));
for(int i=1;i<=n;i++)d1[i]=inf;
q.push(s);inq[s]=1;d1[s]=0;
while(!q.empty()){
int u=q.front();q.pop();inq[u]=0;
for(int i=head1[u];i;i=e1[i].next){
int v=e1[i].to,w=e1[i].w;
if(d1[v]>d1[u]+w)
{
d1[v]=d1[u]+w;
f1[v]=i;
if(!inq[v]){
inq[v]=1;
q.push(v);
}
}
}
}
}
void sp2(int s){
queue<int> q;
int inq[20010];
memset(inq,0,sizeof(inq));
for(int i=1;i<=n;i++)d2[i]=inf;
q.push(s);inq[s]=1;d2[s]=0;
while(!q.empty()){
int u=q.front();q.pop();inq[u]=0;
for(int i=head2[u];i;i=e2[i].next){
int v=e2[i].to,w=e2[i].w;
if(d2[v]>d2[u]+w)
{
d2[v]=d2[u]+w;
f2[v]=i;
if(!inq[v]){
inq[v]=1;
q.push(v);
}
}
}
}
}
void sp3(int s){
queue<int> q;
int inq[20010];
memset(inq,0,sizeof(inq));
for(int i=1;i<=n;i++)d3[i]=inf;
q.push(s);inq[s]=1;d3[s]=0;
while(!q.empty()){
int u=q.front();q.pop();
for(int i=head3[u];i;i=e3[i].next){
int v=e3[i].to,w=e3[i].w;
if(i==f1[u])w--;
if(i==f2[u])w--;
if(d3[v]>d3[u]+w)
{
d3[v]=d3[u]+w;
if(!inq[v]){
inq[v]=1;
q.push(v);
}
}
}inq[u]=0;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b,c,d;
cin>>a>>b>>c>>d;
add1(a,b,c);
add2(a,b,d);
add3(a,b,2);
}
sp1(n);
sp2(n);
sp3(1);
cout<<d3[n];
}
USACO Dueling GPS's的更多相关文章
- BZOJ3538: [Usaco2014 Open]Dueling GPS
3538: [Usaco2014 Open]Dueling GPS Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 59 Solved: 36[Subm ...
- BZOJ 3538 == 洛谷 P3106 [USACO14OPEN]GPS的决斗Dueling GPS's
P3106 [USACO14OPEN]GPS的决斗Dueling GPS's 题目描述 Farmer John has recently purchased a new car online, but ...
- Luogu P3106 [USACO14OPEN]GPS的决斗Dueling GPS's(最短路)
P3106 [USACO14OPEN]GPS的决斗Dueling GPS's 题意 题目描述 Farmer John has recently purchased a new car online, ...
- USACO 2014 US Open Dueling GPS's /// SPFA
题目大意: 给定n个点m条边的有向图 有两个GPS 分别认为 A[i]到B[i] 的一条边的花费是P[i].Q[i] 当当前走的边不是GPS认为的最短路上的边就会被警告 即两个GPS都不认为是最短路上 ...
- [USACO14OPEN] Dueling GPS's[最短路建模]
题目描述 Farmer John has recently purchased a new car online, but in his haste he accidentally clicked t ...
- 【BZOJ】3538: [Usaco2014 Open]Dueling GPS(spfa)
http://www.lydsy.com/JudgeOnline/problem.php?id=3538 题意不要理解错QAQ,是说当前边(u,v)且u到n的最短距离中包含这条边,那么这条边就不警告. ...
- 洛谷 3106 [USACO14OPEN]GPS的决斗Dueling GPS's 3720 [AHOI2017初中组]guide
[题解] 这两道题是完全一样的. 思路其实很简单,对于两种边权分别建反向图跑dijkstra. 如果某条边在某一种边权的图中不是最短路上的边,就把它的cnt加上1.(这样每条边的cnt是0或1或2,代 ...
- [USACO14OPEN]GPS的决斗Dueling GPS's
题目概况 题目描述 给你一个\(N\)个点的有向图,可能有重边. 有两个\(GPS\)定位系统,分别认为经过边\(i\)的时间为\(P_i\),和\(Q_i\). 每走一条边的时候,如果一个系统认为走 ...
- 2018.07.22 洛谷P3106 GPS的决斗Dueling GPS's(最短路)
传送门 图论模拟题. 这题直接写3个(可以压成一个)spfa" role="presentation" style="position: relative;&q ...
随机推荐
- python科学计算库-pandas
------------恢复内容开始------------ 1.基本概念 在数据分析工作中,Pandas 的使用频率是很高的, 一方面是因为 Pandas 提供的基础数据结构 DataFrame 与 ...
- pytest--生成HTML报告
前戏 我们做自动化,测试报告是必不可少的.方便自己查看,也可以供领导查看,一个测试报告就可以说明我们做了哪些事情,pytest-html插件给我们提供了一个很简陋的测试报告,为什么说简陋,因为是真简陋 ...
- 解决WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
问题: 当我想要利用win10本地的cmd进行: ssh root@192.168.1.230 时,出现了如下错误: C:\Users\Raodi>ssh root@192.168.1.230 ...
- (四十一)golang--goroutine
首先得了解: 进程 线程 并发 并行 Go协程和Go主线程: 主线程:相当于进程:直接作用于cpu上,是重量级的,是物理态的: 协程:相当于轻量级的线程:由主协程开启,是逻辑态的: Go协程的特点: ...
- Apache Maven 3.6.3配置安装
1.maven 3.5 下载地址:http://maven.apache.org/download.cgi 2.下载了解压到 3.配置环境变量 4.测试看是否安装成功 5.maven配置(全局配置,用 ...
- LeetCode 283:移动零 Move Zeroes
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. Given an array nums, write a function to move all 0' ...
- 解决centos ssh连接很慢的问题
更改配置文件vi /etc/ssh/sshd_config找到UseDNS 将UseDNS前面的#删除,并将YES改为NO,若找不到UseDNS,则手动添加UseDNS,并将其设置成No保存并重启ss ...
- C# 中一个限制 Task 并发执行的数量的示例
直接贴代码了: using System; using System.Linq; using System.Threading; using System.Threading.Tasks; class ...
- 2019-11-29-WPF-模拟触摸设备
原文:2019-11-29-WPF-模拟触摸设备 title author date CreateTime categories WPF 模拟触摸设备 lindexi 2019-11-29 08:47 ...
- rsync性能终极优化【Optimize rsync performance】
前言 将文件从一台计算机同步或备份到另一台计算机的快速简便的方法是使用rsync.我将介绍通常用于备份数据的命令行选项,并显示一些选项以极大地将传输速度从大约20-25 MB / s加快到90 MB ...