Description

异变又发生了,魂魄妖梦作为幻想乡的一名自(cheng)机(guan),主动前去解决异变。
我们用一个n个点、m条边的无向联通图来表示妖梦可选择的路线,妖梦从白玉楼出发,白玉楼被视为编号为1的点,编号为2——n的点是幻想乡的村庄,其中编号为n的村庄发生了异变。
每条边上可能会有一些妖怪袭击人类(然而妖梦是半人半灵),所以对于第i条边,妖梦需要t[i]分钟通过这条路。妖梦带了她的人符[现世斩],可以使所有连接点x的边的通过时间变成1(x可以任意指定)。然而为了保留足够的力量解决异变,妖梦只会用这个符卡一次。妖梦想知道,她到达村庄n的最短时间是多少。

Solution

跟GDOI2016第二天的第一题好像啊!
不过我换了一种方法。
先从1到n做一遍dij,然后再从n到1做一遍dij。
每次枚举一个中间点x,然后求出min{d[1,u]}和min{d[v,n]},u和v与x直接相连,最后用d[1,u]+d[v,n]+2来更新最优答案就行。复杂度O(nm)。

Code

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;const int maxn=100005,maxm=1000005;typedef long long LL;int n,m,tot,h[maxn],e[maxm],next[maxm],len[maxm],pos[maxn],id[maxn];LL f1[maxn],f2[maxn],ans;char c;int read()
{for (c=getchar();c<'0' || c>'9';c=getchar());int x=c-48;for (c=getchar();c>='0' && c<='9';c=getchar()) x=x*10+c-48;return x;
}void add(int x,int y,int l)
{e[++tot]=y; next[tot]=h[x]; len[tot]=l; h[x]=tot;
}void Up(int x,LL *f)
{while (x>1 && f[id[x/2]]>f[id[x]]){id[x/2]^=id[x]^=id[x/2]^=id[x];pos[id[x]]=x;x/=2;}pos[id[x]]=x;
}void Down(int x,LL *f)
{while (x*2<=tot){int son=(x*2==tot || f[id[x*2]]<f[id[x*2+1]])?x*2:x*2+1;if (f[id[x]]<=f[id[son]]) break;id[x]^=id[son]^=id[x]^=id[son];pos[id[x]]=x;x=son;}pos[id[x]]=x;
}void Dij(int x,LL *f)
{for (int i=1;i<=n;i++) f[i]=1e16;f[x]=0;tot=1;id[1]=x; pos[x]=1;for (int i=1;i<=n;i++) if (i!=x){id[++tot]=i; pos[i]=tot;}for (int i=1;i<=n;i++){int x=id[1];id[1]=id[tot--]; pos[id[1]]=1;Down(1,f);for (int j=h[x];j;j=next[j]) if (f[x]+len[j]<f[e[j]]){f[e[j]]=f[x]+len[j]; Up(pos[e[j]],f);}}
}int main()
{freopen("cut.in","r",stdin); freopen("cut.out","w",stdout);n=read(); m=read();while (m--){int x=read(),y=read(),l=read();add(x,y,l); add(y,x,l);}Dij(1,f1); Dij(n,f2);ans=f1[0]=f2[0]=1e16;for (int i=h[1];i;i=next[i]) ans=min(ans,f2[e[i]]+1);for (int i=h[n];i;i=next[i]) ans=min(ans,f1[e[i]]+1);for (int i=2;i<n;i++){int x=0,y=0;for (int j=h[i];j;j=next[j]){if (f1[e[j]]<f1[x]) x=e[j];if (f2[e[j]]<f2[y]) y=e[j];}ans=min(ans,f1[x]+f2[y]+2);}printf("%lld\n",ans);fclose(stdin); fclose(stdout);return 0;
}

【JZOJ4597】现世斩相关推荐

  1. JZOJ4597. 现世斩 题解

    题目 Description 异变又发生了,魂魄妖梦作为幻想乡的一名自(cheng)机(guan),主动前去解决异变. 我们用一个n个点.m条边的无向联通图来表示妖梦可选择的路线,妖梦从白玉楼出发,白 ...

  2. 【NOIP2016模拟7.9】现世斩

    Description 异变又发生了,魂魄妖梦作为幻想乡的一名自(cheng)机(guan),主动前去解决异变. 我们用一个n个点.m条边的无向联通图来表示妖梦可选择的路线,妖梦从白玉楼出发,白玉楼被 ...

  3. 【JZOJ 4597】 现世斩

    Description 异变又发生了,魂魄妖梦作为幻想乡的一名自(cheng)机(guan),主动前去解决异变. 我们用一个n个点.m条边的无向联通图来表示妖梦可选择的路线,妖梦从白玉楼出发,白玉楼被 ...

  4. 【JZOJ 4597】现世斩

    Description 异变又发生了,魂魄妖梦作为幻想乡的一名自(cheng)机(guan),主动前去解决异变. 我们用一个n个点.m条边的无向联通图来表示妖梦可选择的路线,妖梦从白玉楼出发,白玉楼被 ...

  5. 【jzoj4597】【现世斩】【平衡树】【set】

    题目大意 给出有权无向连通图,有一次机会使与一个点相连的边的权变为一,求最短路. 题解 显然的想法是学习gdoi2016的一题,分层单源最短路,设f[i][0,2],表示没有用机会,在前驱用机会,没有 ...

  6. 科大讯飞的2018:深陷同传造假及炒房风波,市值遭腰斩蒸发600亿

    https://www.toutiao.com/a6654740002490024452/ 2019-02-06 12:29:58 近日,科大讯飞董事长刘庆峰公开回应外界对公司的诸多质疑,称科大讯飞创 ...

  7. 溃不成军:科通芯城一度再跌近30% 股价三天腰斩

    在昨日跌逾20%后,遭做空机构连续狙击的港股科通芯城,今日上午一度再跌28%,最低报4.29港元.过去三个交易日,科通芯城股价已惨遭腰斩. 科通芯城董事长康敬伟表示,"目前科通芯城不再就其相 ...

  8. [LGP4707] 重返现世

    世界是物质的,物质是运动的,运动是有规律的,规律是可以被认识的. 关于期望意义下min-max容斥,我们认为每个事件的时间来认识事件,max/min S表示集合S中所有时间最后/最前出现的事件,E(m ...

  9. 3D角色设定全析百图斩

    我们在3D角色模型与动画设定上积累厚实,在卡噗角色设定中,我们做了很多的风格尝试以及整体配饰穿搭,去达到新锐时尚的品牌目标.回看角色设定已超过100体,在此分享整体设计思路过程与百图斩. 早期卡噗设计 ...

最新文章

  1. php ile_get_contents无法请求https连接的解决方法
  2. Navicat for Oracle工具连接oracle
  3. python语言命名规定首字符不能是_python标识符命名规范原理解析
  4. 本地tomcat的start.bat启动时访问不出现小猫图标
  5. 面向对象初调用:foolish 电梯
  6. WiresShark 图解教程1
  7. javawebday30(验证码在客户端 用当前时间来请求下一张图片 VerifyCode代码)
  8. EPS PanSystem v3.4.0 Full 1CD(解析试井解释软件)\
  9. Fama-French五因子模型实用攻略
  10. 汽车发动机电子控制技术
  11. 英语 1038个词根 后缀217个!
  12. 5G+工业互联网行业解决方案
  13. 服务器部署项目拓扑图,cdn服务器部署拓扑图
  14. centos7开启网卡功能
  15. RAM的 Parity 与 ECC
  16. mysql创建表格例子_Mysql创建表例子 | restcy 技术博客
  17. 渗透神器burpsuite的汉化
  18. 微软SQL服务器登录,Microsoft SQL Server 【Windows 身份验证】和 【sa】都无法登录的解决方案...
  19. 微信广告转化统计java,百度推广oCPC微信号复制转化次数统计系统数据接口
  20. 计算机云计算服务外包,云计算上的三类外包计算

热门文章

  1. VB:如何设置Richtextbox的行间距
  2. oracle 索引基本原理
  3. 【乱入】Uva11021麻球繁衍
  4. 专业系统维护:CleanMyMac X for mac
  5. 未能找到引用的组件“Microsoft.Office.Core”
  6. 出现错误(已解决)RuntimeError: CUDA error: no kernel image is available for execution on the device CUDA ker
  7. UnityStandardAsset工程、源码分析_5_赛车游戏[AI控制]_AI机制
  8. 学校食堂剩餐怎么办?智慧食堂解决方案来了
  9. deinterlace 隔行 progressive 逐行 3:2pulldown
  10. 计算机相关先锋队名称,励志团队名称和口号大全_团队励志队名口号大全