bzoj 1576: [Usaco2009 Jan]安全路经Travel——并查集+dijkstra
Description
Input
* 第一行: 两个空格分开的数, N和M
* 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i
Output
* 第1..N-1行: 第i行包含一个数:从牛棚_1到牛棚_i+1并且避免从牛棚1到牛棚i+1最短路经上最后一条牛路的最少的时间.
如果这样的路经不存在,输出-1.
Sample Input
1 2 2
1 3 2
3 4 4
3 2 1
2 4 3
Sample Output
3
6
—————————————————————————————————
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- using namespace std;
- const int N=1e5+,M=4e5+,inf=0x3f3f3f3f;
- int read(){
- int ans=,f=,c=getchar();
- while(c<''||c>''){if(c=='-') f=-; c=getchar();}
- while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
- return ans*f;
- }
- int n,m,ans[N];
- int f[N],fa[N];
- int find(int x){while(x!=f[x]) x=f[x]=f[f[x]]; return x;}
- int first[N],cnt,cntq;
- struct node{int from,to,next,w;}e[M],qs[M];
- bool cmp(node a,node b){return a.w<b.w;}
- void ins(int a,int b,int w){e[++cnt]=(node){a,b,first[a],w}; first[a]=cnt;}
- void insert(int a,int b,int w){ins(a,b,w); ins(b,a,w);}
- int dis[N],dep[N];
- struct Q{
- int d,pos;
- bool operator <(const Q& x)const{return x.d<d;}
- };
- priority_queue<Q>q;
- void dj(){
- memset(dis,0x3f,sizeof(dis));
- q.push((Q){,}); dis[]=;
- while(!q.empty()){
- Q p=q.top(); q.pop();
- if(p.d>dis[p.pos]) continue;
- int x=p.pos;
- for(int i=first[x];i;i=e[i].next){
- int now=e[i].to;
- if(dis[now]>dis[x]+e[i].w){
- dis[now]=dis[x]+e[i].w;
- dep[now]=dep[x]+;
- fa[now]=x;
- q.push((Q){dis[now],now});
- }
- }
- }
- }
- int main(){
- int x,y,w;
- n=read(); m=read();
- for(int i=;i<=n;i++) f[i]=i;
- for(int i=;i<=m;i++) x=read(),y=read(),w=read(),insert(x,y,w);
- dj();
- for(int i=;i<=cnt;i++){
- x=e[i].from; y=e[i].to;
- if(dep[x]<dep[y]) swap(x,y);
- if(dis[x]==dis[y]+e[i].w) continue;
- qs[++cntq]=(node){x,y,,dis[x]+dis[y]+e[i].w};
- }
- sort(qs+,qs++cntq,cmp);
- for(int i=;i<=cntq;i++){
- x=qs[i].from; y=qs[i].to;
- while(x!=y){
- if(dep[x]<dep[y]) swap(x,y);
- if(!ans[x]) ans[x]=qs[i].w-dis[x];
- x=f[x]=find(fa[x]); //printf("[%d]\n",x);
- }
- }
- for(int i=;i<=n;i++){
- if(!ans[i]) printf("-1\n");
- else printf("%d\n",ans[i]);
- }
- return ;
- }
bzoj 1576: [Usaco2009 Jan]安全路经Travel——并查集+dijkstra的更多相关文章
- bzoj 1576: [Usaco2009 Jan]安全路经Travel 树链剖分
1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec Memory Limit: 64 MB Submit: 665 Solved: 227[Sub ...
- [BZOJ 1576] [Usaco2009 Jan] 安全路经Travel 【树链剖分】
题目链接: BZOJ - 1576 题目分析 首先Orz Hzwer的题解. 先使用 dijikstra 求出最短路径树. 那么对于一条不在最短路径树上的边 (u -> v, w) 我们可以先沿 ...
- BZOJ.1576.[Usaco2009 Jan]安全路经Travel(树形DP 并查集)
题目链接 BZOJ 洛谷 先求最短路树.考虑每一条非树边(u,v,len),设w=LCA(u,v),这条边会对w->v上的点x(x!=w)有dis[u]+dis[v]-dis[x]+len的距离 ...
- bzoj 1576 [Usaco2009 Jan]安全路经Travel(树链剖分,线段树)
[题意] 给定一个无向图,找到1-i所有的次短路经,要求与最短路径的最后一条边不重叠. [思路] 首先用dijkstra算法构造以1为根的最短路树. 将一条无向边看作两条有向边,考察一条不在最短路树上 ...
- bzoj 1576: [Usaco2009 Jan]安全路经Travel【spfa+树链剖分+线段树】
这几天写USACO水题脑子锈住了--上来就贪心,一交就WA 事实上这个是一个叫最短路树的东西,因为能保证只有一条最短路,所以所有最短路合起来是一棵以1为根的树,并且在这棵树上,每个点被精灵占据的路是它 ...
- BZOJ 1576: [Usaco2009 Jan]安全路经Travel
日常自闭半小时后看题解,太弱了qwq. 感觉这道题还是比较难的,解法十分巧妙,不容易想到. 首先题目说了起点到每个点的最短路都是唯一的,那么对这个图求最短路图必定是一棵树,而且这棵树是唯一的. 那么我 ...
- 【BZOJ】1576 [Usaco2009 Jan]安全路经Travel
[算法]最短路树+(树链剖分+线段树)||最短路树+并查集 [题解] 两种方法的思想是一样的,首先题目限制了最短路树唯一. 那么建出最短路树后,就是询问对于每个点断掉父边后重新找路径的最小值,其它路径 ...
- 【BZOJ1576】[Usaco2009 Jan]安全路经Travel 最短路+并查集
[BZOJ1576][Usaco2009 Jan]安全路经Travel Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, ...
- 【思维题 并查集 图论】bzoj1576: [Usaco2009 Jan]安全路经Travel
有趣的思考题 Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第 ...
随机推荐
- vs调试代码的时候断点无法命中
https://blog.csdn.net/xxdddail/article/details/18696399 该链接提供的解决方案主要是如下图片:禁用 图片标记的这个选项即可:
- oracle12c 新建表空间
第1步:创建临时表空间 create temporary tablespace jeeplus_temp tempfile 'D:\app\Administrator\virtual\product\ ...
- Linux-获得命令帮助man
date:显示当前系统时间,修改时间 clock,hwclock:显示硬件时间 cal:calendar,查看日历 计时器靠晶体振荡器来完成计时 Linux: 实时时钟,rtc,real time c ...
- KVM web管理工具——WebVirtMgr(一)
WebVirtMgr 介绍 WebVirtMgr采用几乎纯Python开发,其前端是基于Python的Django,后端是基于Libvirt的Python接口,将日常kvm的管理操作变的更加的 ...
- mysql分布式技术
所有的分布式技术 dobble zokkiper ngix
- HDU 3269 P2P File Sharing System(模拟)(2009 Asia Ningbo Regional Contest)
Problem Description Peer-to-peer(P2P) computing technology has been widely used on the Internet to e ...
- Android stateMachine分析
StateMachine与State模式的详细介绍可以参考文章:Android学习 StateMachine与State模式 下面是我对于StateMachine的理解: 先了解下消息处理.看下Sta ...
- [GitHub] - Unity Timer
https://github.com/akbiggs/UnityTimer#unity-timer Run actions after a delay in Unity3D. This library ...
- Xampp+Openfire+Spark的简单使用
Openfire与Spark的简单实用 1.安装Openfire 百度云 提取码:uu11 2.查找路径 /usr/local/openfire 这时候需要将openfire的文件属性都设置为 可读可 ...
- 201621044079《Java程序设计》第二周学习总结
Week02-Java基本语法与类库 1.本周学习总结 记录本周学习中的重点 尝试使用 原则:少而精,自己写.即使不超过5行也可,但请一定不要简单的复制粘贴 1.学习了Java的数据类型 int ch ...