BZOJ 2407: 探险/BZOJ 4398: 福慧双修 dijkstra 构造
2407: 探险
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 170 Solved: 95
[Submit][Status][Discuss]
Description
Input
第一行两个数n,m表示溶洞的数量以及暗道的数量。
Output
Sample Input
1 2 2 1
2 3 4 5
3 1 3 2
Sample Output
HINT
N<=10000,M<=200000,1<=W,V<=10000
双倍经验啊(福慧双修数据范围大一点)
这两道题都是rank1 还比rank2快好多 哈哈哈哈
题解看黄学长的吧
#include<cmath>
#include<ctime>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<string>
#include<bitset>
#include<queue>
#include<set>
#include<map>
using namespace std;typedef long long ll;inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
void print(ll x)
{if(x<0)x=-x,putchar('-');if(x>=10)print(x/10);putchar(x%10+'0');}const int N=10100,M=400100,inf=0X3f3f3f3f;int n,m,T;int ecnt,last[N];
struct EDGE{int to,nt,val;}e[M];
inline void add(int u,int v,int val)
{e[++ecnt]=(EDGE){v,last[u],val};last[u]=ecnt;}int U[M],V[M],VAL[M],tot;inline void insert(int u,int v,int val)
{U[++tot]=u;V[tot]=v;VAL[tot]=val;}struct node{int pos,dis;friend bool operator <(const node &x,const node &y){return x.dis>y.dis;}};bool vis[N];int dis[N],p[N];priority_queue<node>q;void dijkstra()
{memset(vis,0,sizeof(vis));memset(dis,0X3f,sizeof(dis));q.push((node){1,0});dis[1]=0;register int u,i;while(!q.empty()){u=q.top().pos;q.pop();if(vis[u])continue;vis[u]=1;for(i=last[u];i;i=e[i].nt)if(dis[e[i].to]>dis[u]+e[i].val){dis[e[i].to]=dis[u]+e[i].val;u==1?p[e[i].to]=e[i].to:p[e[i].to]=p[u];if(!vis[e[i].to])q.push((node){e[i].to,dis[e[i].to]});}}
}void rebuild()
{register int u,i;for(u=1;u<=n;++u)for(i=last[u];i;i=e[i].nt){if(e[i].to==1) {p[u]^u?insert(1,T,dis[u]+e[i].val):insert(u,T,e[i].val);continue;}if(u==1) {if(p[e[i].to]^e[i].to)insert(1,e[i].to,e[i].val);continue;}p[u]^p[e[i].to]?insert(1,e[i].to,dis[u]+e[i].val):insert(u,e[i].to,e[i].val);}ecnt=0;memset(last,0,sizeof(last));for(i=1;i<=tot;++i)add(U[i],V[i],VAL[i]);
}int main()
{n=read();m=read();T=n+1;register int i,u,v,val1,val2;for(i=1;i<=m;++i){u=read();v=read();val1=read();val2=read();add(u,v,val1);add(v,u,val2);}dijkstra();rebuild();dijkstra();if(dis[T]==inf){puts("-1");return 0;}print(dis[T]);puts("");return 0;
}
/*
3 3
1 2 2 1
2 3 4 5
3 1 3 28
*/
BZOJ 2407: 探险/BZOJ 4398: 福慧双修 dijkstra 构造相关推荐
- BZOJ 2407: 探险/4398: 福慧双修
2407: 探险 Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明 ...
- bzoj 4398: 福慧双修(最短路建模/构造)
简述题意: 给定一个有向图,对于连接同两个点的边算作同一条,问不经过重复边的最小正权环. 保证没有重边(这个是指有向的),没有自环. 算法:最短路+构造 难度:NOIP+ 题解: 有一种暴力的思路,感 ...
- bzoj 4398 福慧双修——二进制分组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 如果枚举1号点走哪些点出去,就从那些点出发跑多源最短路即可.最短路不会重复经过一条边. ...
- bzoj 4398 福慧双修 —— 二进制分组+多起点最短路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 按二进制每一位是 0/1 把 1 号点的儿子分成两组,分别作为起点和终点跑多起点最短路 ...
- bzoj 4398 福慧双修 题解
卡了一晚上啊 首先我们要跑一边整张图的spfa,记录每个点是从哪条边出去的(pre数组) 这里记录的不是前驱边,而是和原点相连的第一个点编号,因为不能走重复边所以才要记录这个,以免刚刚出去又原路返回 ...
- 【技巧 二进制分组】bzoj4398: 福慧双修2407: 探险
二进制分组也可以说是一种比较优美的拆贡献方式吧? Description 菩萨为行,福慧双修,智人得果,不忘其本. --唐朠立<大慈恩寺三藏法师传> 有才而知进退,福慧双修,这才难得. - ...
- BZOJ.2069.[POI2004]ZAW(最短路Dijkstra 按位划分)
题目链接 \(Description\) 给定一张带权图(边是双向的,但不同方向长度不同).求从1出发,至少经过除1外的一个点,再回到1的最短路.点和边不能重复经过. \(n\leq5000,m\le ...
- BZOJ 2069 POI2004 ZAW 堆优化Dijkstra
题目大意:给定一张无向图,每条边从两个方向走各有一个权值,求从点1往出走至少一步之后回到点1且不经过一条边多次的最短路 显然我们需要从点1出发走到某个和点1相邻的点上,然后沿最短路走到另一个和点1相邻 ...
- BZOJ 1001 狼抓兔子(Dijkstra)
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
最新文章
- java jar包的路径
- maven根据profile动态选择配置文件
- CG CTF WEB COOKIE
- 爬虫技巧:在pycharm 下 调试 scrapy项目
- oracle插入未调用并行,oracle并行之概念篇
- Spring Session 2.0.0.M1 发布,分布式解决方案
- vb中WindowsMediaPlayer的常用属性和方法
- java 文件解签加签_将更改的文件移到另一个分支进行签入
- GAN里面的Kullback-Leibler Divergence和Jensen–Shannon Divergence
- Unicode编码在JavaScript中的作用是什么?
- CSDN看不见博主博客的评论_解决办法(亲测有效奥)
- python函数调用执行的四个步骤_如何调用python函数
- Linux制作U盘Windows启动盘,windows下制作linux U盘启动盘或者安装优盘(转)
- PTA-1016——Phone Bills
- Set接口以及子集合(HashSet/LinkedHashSet/TreeSet)的用法和数据结构
- php两个并排的按钮,如何并排设置2个按钮
- 使用jpedal解析PDF到XML
- 初级php程序员的自我提升
- 3 万字 + 100 张图带你彻底搞懂 TCP 面试题(强烈建议收藏)
- 让地震预警更快、更准,人工智能助力城市应急管理
热门文章
- 【内部接口】LVGL WIFI配网
- 一次真实的入侵-------记对一足球推荐站点的渗透
- Ubuntu 16.04 解决钉钉、微信等打开chrome时无法打开链接,只能停留在主页的问题
- 文档点击链接无法自动跳转浏览器+google浏览器重启无法继续浏览上次打开的网页
- 差分信号经运放后转为单端输出供单片机采集原理图
- python人脸识别、语音合成、智能签到系统
- 【SpringBoot】springboot日志配置
- 学校热水系统服务认证
- 解决:Plug-in org.eclipse.wst.jsdt.ui was unable to instantiate class org.eclipse.wst.jsdt.inte
- 将123倒转 c语言,中国航信杯C语言程序设计答案解析版.doc