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+5;
const int M=1e5+5;

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=1; mem(head,0); }
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]=0; q.push(s);
    while(!q.empty()) {
        int u=q.front(); q.pop();
        inq[u]=0;
        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]=1, q.push(v);
        }
    }
}

void check(int u[],int v[],int w[],int st) {
    init();
    inc(i,1,m) addE(u[i],v[i],w[i]);
    SPFA(st);
    inc(i,1,m) if(dis[v[i]]!=dis[u[i]]+w[i]) C[i]++;
}

int main()
{
    while(~scanf("%d%d",&n,&m)) {
        inc(i,1,m) scanf("%d%d%d%d",&A[i],&B[i],&P[i],&Q[i]);
        mem(C,0);
        check(B,A,P,n);
        check(B,A,Q,n);
        check(A,B,C,1);
        printf("%d\n",dis[n]);
    }

    return 0;
}

USACO 2014 US Open Dueling GPS's /// SPFA

原文地址:https://www.cnblogs.com/zquzjx/p/10548885.html

时间: 2024-10-29 04:23:53

USACO 2014 US Open Dueling GPS's /// SPFA的相关文章

BZOJ3538: [Usaco2014 Open]Dueling GPS

3538: [Usaco2014 Open]Dueling GPS Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 59  Solved: 36[Submit][Status] Description Farmer John has recently purchased a new car online, but in his haste he accidentally clicked the "Submit" button twice w

P3106 GPS的决斗Dueling GPS&#39;s

目录 题目 思路 Code 同步:https://buringstraw.win/index.php/archives/43/ 题目 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

P3106 [USACO14OPEN]GPS的决斗Dueling GPS&#39;s

题面:https://www.luogu.org/problem/P3106 首先以n为起点两边spfa,之后再判断所有的边是否在最短路上,以警告次数作为边权再次spfa. Code: #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<queue> using namespace std;

[USACO14OPEN]GPS的决斗Dueling GPS&#39;s

题目概况 题目描述 给你一个\(N\)个点的有向图,可能有重边. 有两个\(GPS\)定位系统,分别认为经过边\(i\)的时间为\(P_i\),和\(Q_i\). 每走一条边的时候,如果一个系统认为走的这条边不是它认为的最短路,就会受到警告一次. 两个系统是分开警告的,就是说当走的这条边都不在两个系统认为的最短路范围内,就会受到2次警告. 如果边\((u,v)\)不在\(u\)到\(n\)的最短路径上,这条边就受到一次警告,求从\(1\)到\(n\)最少受到多少次警告. 输入格式 第一行,两个整

洛谷 P3106 [USACO14OPEN]GPS的决斗Dueling GPS&#39;s

P3106 [USACO14OPEN]GPS的决斗Dueling GPS's 题目描述 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 equip

USACO翻译:USACO 2014 DEC Silver三题

USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 奶牛IDs 搬家 英文题目名称 piggyback cowids relocate 可执行文件名 piggyback cowids relocate 输入文件名 piggyback.in cowids.in relocate.in 输出文件名 piggyback.out cowids.out relocate.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较

[USACO14OPEN] Dueling GPS&#39;s[最短路建模]

题目描述 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! Ev

USACO翻译:USACO 2014 JAN三题(2)

USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recording skicourse 输入文件名 bteams.in recording.in skicourse.in 输出文件名 bteams.out recording.out skicourse.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比

USACO翻译:USACO 2014 MARCH Silver三题

USACO 2014 MARCH 一.题目概览 中文题目名称 农田灌溉 懒牛 牛叫 英文题目名称 irrigation lazy mooomoo 可执行文件名 irrigation lazy mooomoo 输入文件名 irrigation.in lazy.in mooomoo.in 输出文件名 irrigation.out lazy.out mooomoo.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全