题意:给定一个无向图,你从结点1开始走,每经过一条边需要1的时间,每条边都有一个开放时间,只有当目前所用的时间大于等于开放时间时,这条边才可以被经过。每一单位时间你都必须经过一条边,问最快什么时候可以到达N

一开始觉得当一条边未开放时,最优的策略便是在当前结点和上次经过的结点间徘徊,知道结点开放,于是最少的徘徊次数便是那条边的边权。后面发现奇偶性其实会影响答案。于是将dis分为奇偶跑pb_ds优化的dijkstra即可。

PS:比赛时竟然有人三分钟把这道题切了,再一次证明了我好菜233333

  1. #include<bits/stdc++.h>
  2. #include<ext/pb_ds/priority_queue.hpp>
  3. using namespace std;
  4. #define MAXN 10000+10
  5. typedef long long LL;
  6. const LL INF=;
  7. struct edge{int v,next;LL w;}edge[MAXN*];
  8. struct Ed{
  9. int u,p;LL w;
  10. Ed(){}
  11. Ed(int u,int p,LL w):u(u),p(p),w(w){}
  12. bool operator >(const Ed &a)const{return w>a.w;}
  13. };
  14. typedef __gnu_pbds::priority_queue<Ed,greater<Ed>,__gnu_pbds::thin_heap_tag>heap;
  15. int n,m,head[MAXN],un[MAXN][];
  16. LL dis[MAXN][];
  17. heap::point_iterator it[MAXN][];
  18. heap q;
  19. void add(int u,int v,LL w){
  20. static int tot=;
  21. edge[++tot].v=v;
  22. edge[tot].w=w;
  23. edge[tot].next=head[u];
  24. head[u]=tot;
  25. }
  26. LL val(LL x,LL y){
  27. if(x>=y)return ;
  28. return ((y-x)&)?(y-x+):y-x+;
  29. }
  30. void dijkstra(){
  31. for(int i=;i<=n;i++)dis[i][]=dis[i][]=INF;
  32. dis[][]=;
  33. for(int i=;i<=n;i++){
  34. it[i][]=q.push((Ed){i,,dis[i][]});
  35. it[i][]=q.push((Ed){i,,dis[i][]});
  36. }
  37. q.push((Ed){,,});
  38. while(!q.empty()){
  39. int u=q.top().u,p=q.top().p;
  40. q.pop();
  41. if(un[u][p])continue;
  42. un[u][p]=;
  43. for(int i=head[u];i;i=edge[i].next){
  44. int v=edge[i].v,w;
  45. w=max(1LL,val(dis[u][p],edge[i].w));
  46. LL tmp=dis[u][p]+w;
  47. if(!un[v][tmp&]&&dis[u][p]+w<dis[v][tmp&]){
  48. dis[v][tmp&]=tmp;
  49. q.modify(it[v][tmp&],(Ed){v,tmp&,dis[v][tmp&]});
  50. }
  51. }
  52. }
  53. }
  54. int main(){
  55. scanf("%d%d",&n,&m);
  56. for(int i=;i<=m;i++){
  57. int u,v;LL w;
  58. scanf("%d%d%lld",&u,&v,&w);
  59. add(u,v,w);add(v,u,w);
  60. }
  61. dijkstra();
  62. if(min(dis[n][],dis[n][])==INF)printf("-1\n");
  63. else printf("%lld\n",min(dis[n][],dis[n][]));
  64. return ;
  65. }

Cs Round#54 E Late Edges的更多相关文章

  1. Cs Round#54 D Spanning Trees

    题意:构造一张N个结点无重边.无自环的无向图.使得其最小生成树和最大生成树共享K条边. 样例一很具有启发性: 当K!=0时,我们可以先构造出一条链,链的长度为n-k的链,作为最小生成树的一部分,之后由 ...

  2. CSA Round #54 $\ $Voting

    CSA Round #54 \(\ \)Voting 题目大意: 原题网址:戳我戳我! 一次歌唱比赛中,一位歌手刚刚结束表演,评委正在打分. 一共有 \(n\) 位评委,他们每人可以打 \(1\) 分 ...

  3. Codeforces Beta Round #54 (Div. 2)

    Codeforces Beta Round #54 (Div. 2) http://codeforces.com/contest/58 A 找子序列 #include<bits/stdc++.h ...

  4. CS Round#53 C Histogram Partition

    题意:给定一个数组A,以及一个初始值全为0的空数组B,每次可以对数组B的任意一个区间内的所有数+x,问至少几次操作能把B数组变成A数组 NOIP原题(积木大赛)升级版,话说CS怎么那么多跟NOIP原题 ...

  5. Educational Codeforces Round 54

    这套题不难,但是场上数据水,导致有很多叉点 A. 因为是让求删掉一个后字典序最小,那么当a[i]>a[i+1]的时候,删掉a[i]一定最优!这个题有个叉点,当扫完一遍如果没有满足条件的,就删去最 ...

  6. Educational Codeforces Round 54 (Rated for Div. 2) ABCD

    A. Minimizing the String time limit per test 1 second memory limit per test 256 megabytes Descriptio ...

  7. CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告

    最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且 ...

  8. CH Round #54 - Streaming #5 (NOIP模拟赛Day1)

    A.珠 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20(NOIP模拟赛Day1)/珠 题解:sb题, ...

  9. Cs Round#56 D Find Path Union

    题意:有一棵如下的完全二叉树,求所有给定结点到根节点的路径的并有多少条边. 一开始联想到线段树,发现结点的排布很像线段树的标号.于是模仿线段树敲了一下,交上去发现3个点MLE了... 无心优化,跑去看 ...

随机推荐

  1. Linux环境下网卡配置

    DEVICE=eth0 HWADDR=08:00:27:0D:3C:F6 TYPE=Ethernet UUID=73ff4482-1baf-4c9b-b859-720ca92a704a ONBOOT= ...

  2. 磁盘管理之 raid 文件系统 分区

    第1章 RAID 磁盘阵列 1.1 使用raid的目的 1)获得更大的容量 2)让数据更安全 3)读写速度更快 1.2 raid0.raid1.raid5.raid10对比 磁头 0磁道 1扇区 前4 ...

  3. java线程池ThreadPool

    package com.java.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurren ...

  4. 【Kafka源码】broker被选为controller之后的连锁反应

    [TOC] 今天我们主要分析下broker被选为controller之后,主要干了什么.门面代码先列出来: def onControllerFailover() { if (isRunning) { ...

  5. Python模块:paramiko

    paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实. 1.下载安装 Wi ...

  6. map的常用方法

    1.头文件: #include<map> 2.定义: map<string,int>Map; 或: typedef map<string,int> MAP; MAP ...

  7. Git(1)----Eclipse安装Git插件

    一.从官网选择系统版本下载Git并安装 地址:https://git-scm.com/downloads/ 二.打开Eclipse 1. 第一种安装方法: help-->Install New ...

  8. C#多功能DataGridView打印类(WinForm)

    ;                printPreviewDialog.ShowDialog();            }            catch            {         ...

  9. 程序、计算机程序、java初论

    一.程序? 程序一词来自生活,通常指完成某些事情的一种既定方式和过程,可以将程序看成对一系列动作的执行过程的描述. 例如:个人去银行取钱 1.带上存折/银行卡去银行 2.取号排队 3.将存折或储蓄卡递 ...

  10. source is null for getProperty(null, "cpmodel")异常结局

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderExce ...