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

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

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

#include<bits/stdc++.h>
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;
#define MAXN 10000+10
typedef long long LL;
const LL INF=;
struct edge{int v,next;LL w;}edge[MAXN*];
struct Ed{
int u,p;LL w;
Ed(){}
Ed(int u,int p,LL w):u(u),p(p),w(w){}
bool operator >(const Ed &a)const{return w>a.w;}
};
typedef __gnu_pbds::priority_queue<Ed,greater<Ed>,__gnu_pbds::thin_heap_tag>heap;
int n,m,head[MAXN],un[MAXN][];
LL dis[MAXN][];
heap::point_iterator it[MAXN][];
heap q;
void add(int u,int v,LL w){
static int tot=;
edge[++tot].v=v;
edge[tot].w=w;
edge[tot].next=head[u];
head[u]=tot;
}
LL val(LL x,LL y){
if(x>=y)return ;
return ((y-x)&)?(y-x+):y-x+;
}
void dijkstra(){
for(int i=;i<=n;i++)dis[i][]=dis[i][]=INF;
dis[][]=;
for(int i=;i<=n;i++){
it[i][]=q.push((Ed){i,,dis[i][]});
it[i][]=q.push((Ed){i,,dis[i][]});
}
q.push((Ed){,,});
while(!q.empty()){
int u=q.top().u,p=q.top().p;
q.pop();
if(un[u][p])continue;
un[u][p]=;
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].v,w;
w=max(1LL,val(dis[u][p],edge[i].w));
LL tmp=dis[u][p]+w;
if(!un[v][tmp&]&&dis[u][p]+w<dis[v][tmp&]){
dis[v][tmp&]=tmp;
q.modify(it[v][tmp&],(Ed){v,tmp&,dis[v][tmp&]});
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int u,v;LL w;
scanf("%d%d%lld",&u,&v,&w);
add(u,v,w);add(v,u,w);
}
dijkstra();
if(min(dis[n][],dis[n][])==INF)printf("-1\n");
else printf("%lld\n",min(dis[n][],dis[n][]));
return ;
}

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. TIDB技术文档翻译

    http://blog.csdn.net/antony9118/article/details/60470115

  2. sqoop1.4.6从mysql导入hdfs\hive\hbase实例

    //验证sqoop是否连接到mysql数据库sqoop list-tables --connect 'jdbc:mysql://n1/guizhou_test?useUnicode=true& ...

  3. 私有成员 ECMAScript6 weakmap

    把变量放到构造函数里进行私有化,每一个实例都会有一个getName方法,这是低效率的.function Person(name) { this.getName = function() { retur ...

  4. ruby 正则表达式 匹配规则

  5. [译]ASP.NET Core 2.0 区域

    问题 如何将一个规模庞大的ASP.NET Core 2.0应用程序进行逻辑分组? 答案 新建一个ASP.NET Core 2.0空项目,修改Startup类,增加Mvc服务和中间件: public v ...

  6. GoldenGate 传统抽取进程随 DataGuard 主备快速切换的方案(ADG 模式)

    环境描述: 1.节点描述 节点 IP 节点描述 11.6.76.221 GG 抽取端 / DG 节点,数据库版本号为 Oracle-11.2.0.3,与 11.6.76.222 组成 DataGuar ...

  7. angualr4 路由 总结笔记

    使用cli命令创建根路由模块 ng g cl app.router 或自己建一个路由配置文件 如:app/app.router.ts // app/app.router.ts // 将文件修改为 im ...

  8. sql2012笔记

    收缩数据库日志文件1.数据库右键-->Options-->Revovery model =Full 改成 Simple2.数据库右键-->Tasks-->Shrink--> ...

  9. mysql全日志(general log)的命令名称

    在源码sql/sql_parse.cc中定义 const LEX_STRING command_name[]={ { C_STRING_WITH_LEN("Sleep") }, { ...

  10. lumen 中间件详解

    我来给大家,讲解一下lumen中的中间件,高手勿喷. 首先,我们看下lumen中文档中的写法,我这里看的是5.3中文文档.https://lumen.laravel-china.org/docs/5. ...