【JZOJ 4597】 现世斩
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】 现世斩相关推荐
- 【JZOJ 4597】现世斩
Description 异变又发生了,魂魄妖梦作为幻想乡的一名自(cheng)机(guan),主动前去解决异变. 我们用一个n个点.m条边的无向联通图来表示妖梦可选择的路线,妖梦从白玉楼出发,白玉楼被 ...
- 【JZOJ4597】现世斩
Description 异变又发生了,魂魄妖梦作为幻想乡的一名自(cheng)机(guan),主动前去解决异变. 我们用一个n个点.m条边的无向联通图来表示妖梦可选择的路线,妖梦从白玉楼出发,白玉楼被 ...
- 【NOIP2016模拟7.9】现世斩
Description 异变又发生了,魂魄妖梦作为幻想乡的一名自(cheng)机(guan),主动前去解决异变. 我们用一个n个点.m条边的无向联通图来表示妖梦可选择的路线,妖梦从白玉楼出发,白玉楼被 ...
- JZOJ4597. 现世斩 题解
题目 Description 异变又发生了,魂魄妖梦作为幻想乡的一名自(cheng)机(guan),主动前去解决异变. 我们用一个n个点.m条边的无向联通图来表示妖梦可选择的路线,妖梦从白玉楼出发,白 ...
- 【jzoj4597】【现世斩】【平衡树】【set】
题目大意 给出有权无向连通图,有一次机会使与一个点相连的边的权变为一,求最短路. 题解 显然的想法是学习gdoi2016的一题,分层单源最短路,设f[i][0,2],表示没有用机会,在前驱用机会,没有 ...
- JZOJ 5461 购物 —— 贪心
题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...
- 科大讯飞的2018:深陷同传造假及炒房风波,市值遭腰斩蒸发600亿
https://www.toutiao.com/a6654740002490024452/ 2019-02-06 12:29:58 近日,科大讯飞董事长刘庆峰公开回应外界对公司的诸多质疑,称科大讯飞创 ...
- 溃不成军:科通芯城一度再跌近30% 股价三天腰斩
在昨日跌逾20%后,遭做空机构连续狙击的港股科通芯城,今日上午一度再跌28%,最低报4.29港元.过去三个交易日,科通芯城股价已惨遭腰斩. 科通芯城董事长康敬伟表示,"目前科通芯城不再就其相 ...
- hdu 4597 Play Game(记忆化搜索)
题目链接:hdu 4597 Play Game 题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略.问说第一个人对多的分值. 解题思路:记忆化搜索,状态出来就很水,dp ...
最新文章
- 利用解构赋值获取后端特定字段数据
- xp电脑怎么取消开机密码
- php对象依赖注入作用,php面向对象依赖注入理解及代码举例分析解释
- 【Hadoop】同步集群时间
- python第四周测试答案_Python程序开发第四周作业
- 系统动力学模型_RCR新文:基于系统动力学模型的中国煤炭产能情景预测
- 一个号支持多个移动运营商
- maya藤蔓插件_教你如何用Maya制作藤蔓生长路径动画
- 手绘板计算机技术,手绘板怎么用 手绘板和数位板的差别区别【详解】
- 器件基础知识——电阻
- APP上查个人信用报告靠谱吗?
- 用html与js实现简单日历,纯JS实现简单的日历
- wifi-pumpkin/wifipumpkin3-2022-kali安装(源码编译)
- 晏殊几何学导读花间流风方程定义与引理
- 东师《中国画技法》离线作业网考
- Python如何将一个列表拆分,将多个数据作为一个元素存放到元组中
- 最近有两个请了专业团队做地推
- QT常用实用的界面设计技巧
- JPEG图像压缩算法详解
- Java后端压缩-浏览器解压缩