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 ...
随机推荐
- JVMTIAgent
JVMTIAgent其实就是一个动态库,利用JVMTI暴露出来的一些接口来干一些我们想做但是正常情况下又做不到的事情,不过为了和普通的动态库进行区分,它一般会实现如下的一个或者多个函数: 1 2 3 ...
- DRF--介绍和安装
前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高.这种应用模式比较适合纯网页应用,但是当后端对接 ...
- 数据仓库005 - 复习Linux shell命令 - crontab调度 sh脚本 后台执行 软连接
一.crontab调度 对于linux 自带crontab而言, xxx.sh的一般编写格式以#!/bin/bash 解释器开头,可在脚本中加入: date 但是,shell脚本执行 需要 ...
- 彻底解决Intellij IDEA中文乱码问题
关于JAVA IDE开发工具,Eclipse系列和Intelli IDEA是大部分公司的主要选择,从开发者的选择角度,Intellij IDEA似乎比Eclipse系列更受欢迎一些.当我们使用Inte ...
- golang--单元测试综合实例
实例说明: (1)一个Monster结构体,字段Name,Age,Skill (2)Monster有一个Store方法,可以将一个Monster对象序列化后保存在文件中: (3)Monster有一个R ...
- ng 判定输入的手机号是否正确
判定输入的手机号是否正确 infoConfirm(){ if (!/^1[3456789]\d{9}$/.test(this.mobile)) { this.pho ...
- CSS的基础学习
CSS学习 --------学习资源 http://www.csszengarden.com/ CSS语法检查http://jigsaw.w3.org/css-validator/ 配置CSS的方法: ...
- 抓包工具 fidder4
抓包工具 fidder4 fidder4是一款基于windos灵活的抓包工具,可抓取pc端移动端的网络数据包. 安装 安装:fidder 4 下载:https://www.telerik.com/d ...
- Spring源码系列 — 注解原理
前言 前文中主要介绍了Spring中处理BeanDefinition的扩展点,其中着重介绍BeanDefinitionParser方式的扩展.本篇文章承接该内容,详解Spring中如何利用BeanDe ...
- CentOS7 vsftp 安装与配置(视频教程)
(双击全屏播放) 1.安装vsftpd yum install -y vsftpd 2.编辑ftp配置文件 vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO ...