Description

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

Analysis

可以分层跑,跟那道GDOI2016day2T1,基本一样。
或者,有一种更机智的方法。从1和n各跑一次最短路,然后枚举一个中间点被废掉,由于中间点所连出的边被废掉都会变成1,所以再枚举中间点连出去的点u,更新min(dis[1~u])和min(dis[u~n]),取到两个min再加上2.

Code

#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define efo(i,v) for(int i=last[v];i;i=next[i])
using namespace std;
typedef long long ll;
const int N=100010,M=1000010;
const ll INF=2147483647000000;
int n,m,tot,to[M],next[M],last[N];
ll wei[M],dis[2][N];
queue<int> q;
bool bz[N];
void link(int u,int v,int w)
{to[++tot]=v,wei[tot]=w,next[tot]=last[u],last[u]=tot;
}
void spfa(int S,int p)
{fill(dis[p],dis[p]+N,INF);dis[p][S]=0;q.push(S);memset(bz,0,sizeof(bz));bz[S]=1;while(!q.empty()){int u=q.front();q.pop();bz[u]=0;efo(i,u){int v=to[i];if(dis[p][u]+wei[i]<dis[p][v]){dis[p][v]=dis[p][u]+wei[i];if(!bz[v]){bz[v]=1;q.push(v);}}}}
}
int main()
{freopen("cut.in","r",stdin);freopen("cut.out","w",stdout);int u,v,w;scanf("%d %d",&n,&m);tot=1;fo(i,1,m){scanf("%d %d %d",&u,&v,&w);if(u==v) continue;link(u,v,w),link(v,u,w);}spfa(1,0);spfa(n,1);ll ans=INF;fo(v,1,n){ll l=INF,r=INF;efo(i,v){int u=to[i];l=min(l,dis[0][u]);r=min(r,dis[1][u]);}ans=min(ans,l+r+2);}printf("%lld\n",ans);return 0;
}

【JZOJ 4597】 现世斩相关推荐

  1. 【JZOJ 4597】现世斩

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

  2. 【JZOJ4597】现世斩

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

  3. 【NOIP2016模拟7.9】现世斩

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

  4. JZOJ4597. 现世斩 题解

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

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

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

  6. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

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

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

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

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

  9. hdu 4597 Play Game(记忆化搜索)

    题目链接:hdu 4597 Play Game 题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略.问说第一个人对多的分值. 解题思路:记忆化搜索,状态出来就很水,dp ...

最新文章

  1. 利用解构赋值获取后端特定字段数据
  2. xp电脑怎么取消开机密码
  3. php对象依赖注入作用,php面向对象依赖注入理解及代码举例分析解释
  4. 【Hadoop】同步集群时间
  5. python第四周测试答案_Python程序开发第四周作业
  6. 系统动力学模型_RCR新文:基于系统动力学模型的中国煤炭产能情景预测
  7. 一个号支持多个移动运营商
  8. maya藤蔓插件_教你如何用Maya制作藤蔓生长路径动画
  9. 手绘板计算机技术,手绘板怎么用 手绘板和数位板的差别区别【详解】
  10. 器件基础知识——电阻
  11. APP上查个人信用报告靠谱吗?
  12. 用html与js实现简单日历,纯JS实现简单的日历
  13. wifi-pumpkin/wifipumpkin3-2022-kali安装(源码编译)
  14. 晏殊几何学导读花间流风方程定义与引理
  15. 东师《中国画技法》离线作业网考
  16. Python如何将一个列表拆分,将多个数据作为一个元素存放到元组中
  17. 最近有两个请了专业团队做地推
  18. QT常用实用的界面设计技巧
  19. JPEG图像压缩算法详解
  20. Java后端压缩-浏览器解压缩

热门文章

  1. HEVC编码标准介绍
  2. 怎么把csdn博客白色的代码样式改成黑色且有个复制按钮的样式
  3. 路由器、交换机、集线器工作在哪一层
  4. 一个月过软考|软件设计师中级考试经验分享
  5. eyoucms 列表分页修改
  6. 电路原理图中的“NC“是什么意思?
  7. 9 | 小程序之样式WXSS
  8. 谢尔宾斯基三角形GUI
  9. 制作TEC数据集的步骤
  10. 谷歌翻译停服后,chrome无法自动翻译?解决办法来了~ (最新)