【题解】  

  这两道题是完全一样的。

  思路其实很简单,对于两种边权分别建反向图跑dijkstra。

  如果某条边在某一种边权的图中不是最短路上的边,就把它的cnt加上1。(这样每条边的cnt是0或1或2,代表经过这条边GPS报警的次数)

  最后用每条边的cnt作为边权建图,跑dijkstra即可。

  判断某条边是不是最短路上的边:建反向图,以n为起点跑dijkstra,如果某条边(u,v)满足dis[v]=dis[u]+w,那么这条边是u到n的最短路上的边。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define LL long long
  5. #define rg register
  6. #define N 200010
  7. #define M 500010
  8. using namespace std;
  9. int n,m,tot,fa,son,last[N],dis[N],pos[N];
  10. struct edge{int to,pre,dis;}e[M];
  11. struct rec{int u,v,d1,d2,d3;}r[M];
  12. struct heap{int p,d;}h[N];
  13. inline int read(){
  14. int k=,f=; char c=getchar();
  15. while(c<''||c>'')c=='-'&&(f=-),c=getchar();
  16. while(''<=c&&c<='')k=k*+c-'',c=getchar();
  17. return k*f;
  18. }
  19. inline void up(int x){
  20. while((fa=x>>)&&h[fa].d>h[x].d) swap(h[fa],h[x]),swap(pos[h[fa].p],pos[h[x].p]),x=fa;
  21. }
  22. inline void down(int x){
  23. while((son=x<<)<=tot){
  24. if(h[son+].d<h[son].d&&son<tot) son++;
  25. if(h[son].d<h[x].d) swap(h[son],h[x]),swap(pos[h[x].p],pos[h[son].p]),x=son;
  26. else return;
  27. }
  28. }
  29. inline void dijkstra(int x){
  30. for(rg int i=;i<=n;i++) dis[i]=1e9;
  31. h[tot=pos[x]=]=(heap){x,dis[x]=};
  32. while(tot){
  33. int now=h[].p; pos[h[tot].p]=; h[]=h[tot--]; if(tot) down();
  34. for(rg int i=last[now],to;i;i=e[i].pre)if(dis[to=e[i].to]>dis[now]+e[i].dis){
  35. dis[to]=dis[now]+e[i].dis;
  36. if(!pos[to]) h[pos[to]=++tot]=(heap){to,dis[to]};
  37. else h[pos[to]].d=dis[to];
  38. up(pos[to]);
  39. }
  40. }
  41. }
  42. inline void Pre(){
  43. memset(last,,sizeof(last));
  44. memset(pos,,sizeof(pos));
  45. tot=;
  46. }
  47. inline void work(){
  48. for(rg int i=,u,v,d;i<=m;i++){
  49. u=r[i].u,v=r[i].v,d=r[i].d1;
  50. e[++tot]=(edge){u,last[v],d}; last[v]=tot;
  51. }
  52. dijkstra(n);
  53. for(rg int i=;i<=m;i++)
  54. if(dis[r[i].u]!=dis[r[i].v]+r[i].d1) r[i].d3++;
  55. Pre();
  56. for(rg int i=,u,v,d;i<=m;i++){
  57. u=r[i].u,v=r[i].v,d=r[i].d2;
  58. e[++tot]=(edge){u,last[v],d}; last[v]=tot;
  59. }
  60. dijkstra(n);
  61. for(rg int i=;i<=m;i++)
  62. if(dis[r[i].u]!=dis[r[i].v]+r[i].d2) r[i].d3++;
  63. Pre();
  64. for(rg int i=,u,v;i<=m;i++){
  65. u=r[i].u,v=r[i].v;
  66. e[++tot]=(edge){u,last[v],r[i].d3}; last[v]=tot;
  67. }
  68. dijkstra(n);
  69. }
  70. int main(){
  71. n=read(); m=read();
  72. for(rg int i=;i<=m;i++)
  73. r[i].u=read(),r[i].v=read(),r[i].d1=read(),r[i].d2=read();
  74. work();
  75. printf("%d\n",dis[]);
  76. return ;
  77. }

洛谷 3106 [USACO14OPEN]GPS的决斗Dueling GPS's 3720 [AHOI2017初中组]guide的更多相关文章

  1. BZOJ 3538 == 洛谷 P3106 [USACO14OPEN]GPS的决斗Dueling GPS's

    P3106 [USACO14OPEN]GPS的决斗Dueling GPS's 题目描述 Farmer John has recently purchased a new car online, but ...

  2. Luogu P3106 [USACO14OPEN]GPS的决斗Dueling GPS's(最短路)

    P3106 [USACO14OPEN]GPS的决斗Dueling GPS's 题意 题目描述 Farmer John has recently purchased a new car online, ...

  3. 2018.07.22 洛谷P3106 GPS的决斗Dueling GPS's(最短路)

    传送门 图论模拟题. 这题直接写3个(可以压成一个)spfa" role="presentation" style="position: relative;&q ...

  4. [USACO14OPEN]GPS的决斗Dueling GPS's

    题目概况 题目描述 给你一个\(N\)个点的有向图,可能有重边. 有两个\(GPS\)定位系统,分别认为经过边\(i\)的时间为\(P_i\),和\(Q_i\). 每走一条边的时候,如果一个系统认为走 ...

  5. 洛谷 U45568 赌神:决斗

    题目描述 \mathcal{tomoo}tomoo决定与\mathcal{CYJian}CYJian进行决斗! 已知\mathcal{tomoo}tomoo有\mathcal{N}N张扑克牌,每张扑克 ...

  6. USACO Dueling GPS's

    洛谷 P3106 [USACO14OPEN]GPS的决斗Dueling GPS's 洛谷传送门 JDOJ 2424: USACO 2014 Open Silver 2.Dueling GPSs JDO ...

  7. 洛谷 P2299 Mzc和体委的争夺战

    洛谷 P2299 Mzc和体委的争夺战 题目背景 mzc与djn第四弹. 题目描述 mzc家很有钱(开玩笑),他家有n个男家丁(做过前三弹的都知道).但如此之多的男家丁吸引来了我们的体委(矮胖小伙), ...

  8. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  9. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

随机推荐

  1. 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)

    不多说,直接上干货! Impala和Hive的关系(详解) 扩展博客 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解) 参考 horton ...

  2. 洛谷 P1540 机器翻译(队列)

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  3. 【洛谷5398】[Ynoi2018]GOSICK(二次离线莫队)

    题目: 洛谷 5398 当我刚学莫队的时候,他们告诉我莫队能解决几乎所有区间问题: 现在,当我发现一个区间问题似乎难以用我所了解的莫队解决的时候,他们就把这题的正解叫做 XXX 莫队.--题记 (以上 ...

  4. 题解报告:hdu1205吃糖果(插空法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1205 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果, ...

  5. java 字符串的比较compareTo

    import java.util.Scanner; public class Demo01 { public static void main(String[] args) {     Scanner ...

  6. Netflix正式开源其API网关Zuul 2--转

    微信公众号:聊聊架构 5 月 21 日,Netflix 在其官方博客上宣布正式开源微服务网关组件 Zuul 2.Netflix 公司是微服务界的楷模,他们有大规模生产级微服务的成功应用案例,也开源了相 ...

  7. 微信小程序flex布局

    一.flex布局基础 二.相对定位和绝对定位   flex的容器和元素   主轴(左-右),交叉轴(上-下)     flex容器属性详解 flex-direction 决定元素的排列方向(默认row ...

  8. LN : leetcode 712 Minimum ASCII Delete Sum for Two Strings

    lc 712 Minimum ASCII Delete Sum for Two Strings 712 Minimum ASCII Delete Sum for Two Strings Given t ...

  9. 了解移动用户的隐私期望:一种基于推荐的Crowdsourcing方法

    应学习之需,最近一段时间阅读了一篇论文,特写下总结,若有纰漏,还望指出. 目录 引言 推荐机制 实现 评估 心得 1.1 为什么要了解移动用户的隐私期望 1.移动设备的广泛使用存在一些潜在的隐私威胁和 ...

  10. Java集合框架源码(三)——arrayList

    1. ArrayList概述: ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部 ...