[bzoj1576]安全路径
先建立最短路径树(即跑dij每一个点向更新他的点连边),考虑一个点的答案路径一定要走过且仅走过一条非树边,枚举非树边(x,y),对于一个点k,如果它在x~lca上(y~lca的路径上同理),那么答案可以更改为s[y]+len(x,y)+s[x]-s[k],前三个不受k的影响,因此越小越好,即将每一条边按照这个排序后依次加入,用并查集来维护即可。
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 #define L (k<<1)
5 #define R (L+1)
6 #define mid (l+r>>1)
7 int E,n,m,x,y,z,k,d[N],fa[N],f[N],head[N],ans[N];
8 struct ji{
9 int x,y;
10 bool operator < (const ji &a)const{
11 return y>a.y;
12 }
13 };
14 struct ji2{
15 int fr,nex,to,len;
16 bool operator < (const ji2 &a)const{
17 return len+d[fr]+d[to]<a.len+d[a.fr]+d[a.to];
18 }
19 }edge[N<<2];
20 priority_queue<ji>q;
21 void add(int x,int y,int z){
22 edge[E]=ji2{x,head[x],y,z};
23 head[x]=E++;
24 }
25 int find(int k){
26 if (k==f[k])return k;
27 return f[k]=find(f[k]);
28 }
29 int main(){
30 scanf("%d%d",&n,&m);
31 memset(head,-1,sizeof(head));
32 for(int i=1;i<=m;i++){
33 scanf("%d%d%d",&x,&y,&z);
34 add(x,y,z);
35 add(y,x,z);
36 }
37 memset(d,0x3f,sizeof(d));
38 q.push(ji{d[1]=0,1});
39 while (!q.empty()){
40 x=q.top().y;
41 q.pop();
42 for(int j=head[x];j!=-1;j=edge[j].nex)
43 if (d[edge[j].to]>d[x]+edge[j].len){
44 fa[edge[j].to]=x;
45 q.push(ji{d[edge[j].to]=d[x]+edge[j].len,edge[j].to});
46 }
47 }
48 sort(edge,edge+E);
49 memset(ans,-1,sizeof(ans));
50 for(int i=1;i<=n;i++)f[i]=i;
51 for(int i=0;i<E;i++)
52 if ((fa[edge[i].to]!=edge[i].fr)&&(fa[edge[i].fr]!=edge[i].to)){
53 x=find(edge[i].fr);
54 y=find(edge[i].to);
55 z=edge[i].len+d[edge[i].fr]+d[edge[i].to];
56 while (x!=y){
57 if (d[x]<d[y])swap(x,y);
58 ans[x]=z-d[x];
59 f[find(x)]=find(fa[x]);
60 x=find(x);
61 }
62 }
63 for(int i=2;i<=n;i++)printf("%d\n",ans[i]);
64 }
[bzoj1576]安全路径的更多相关文章
- [BZOJ1576] [BZOJ3694] [USACO2009Jan] 安全路径(最短路径+树链剖分)
[BZOJ1576] [BZOJ3694] [USACO2009Jan] 安全路径(最短路径+树链剖分) 题面 BZOJ1576和BZOJ3694几乎一模一样,只是BZOJ3694直接给出了最短路树 ...
- 【BZOJ-1576】安全路径Travel Dijkstra + 并查集
1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1044 Solved: 363[Sub ...
- 【BZOJ1576】[Usaco2009 Jan]安全路经Travel 最短路+并查集
[BZOJ1576][Usaco2009 Jan]安全路经Travel Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, ...
- mapreduce中一个map多个输入路径
package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...
- Akka.net路径里的user
因为经常买双色球,嫌每次对彩票号麻烦,于是休息的时候做了个双色球兑奖的小程序,做完了发现业务还挺复杂的,于是改DDD重做设计,拆分服务,各种折腾...,不过这和本随笔没多大关系,等差不多了再总结一下, ...
- java中servlet的各种路径
1. web.xml中<url-pattern>路径,(叫它Servlet路径!) > 要么以“*”开关,要么为“/”开头 2. 转发和包含路径 > *****以“/”开头:相 ...
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
- 使用JavaScript为一张图片设置备选路径
在做网页开发的时候,有时候希望给图片设置一个备选路径,即,当src属性对应的主路径加载失败的时候,图片可以马上切换到备选路径.这样,即使主路径失效了,显示备用路径也不会影响网页的正常体验. 注意到网页 ...
- iOS之开发中一些相关的路径以及获取路径的方法
模拟器的位置: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs ...
随机推荐
- RAC使用auto rolling的方式打补丁
11.2.0.4 RAC 某系统主库使用auto rolling的方式打补丁在一节点执行1-5,结束后然后在二节点执行1-5,结束后最后再在某个节点执行6. 1.backup GI_HOME& ...
- 【数据结构与算法】二叉树的 Morris 遍历(前序、中序、后序)
前置说明 不了解二叉树非递归遍历的可以看我之前的文章[数据结构与算法]二叉树模板及例题 Morris 遍历 概述 Morris 遍历是一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1 ...
- 学习使用SignalR
1.创建空白的控制台程序 2.添加两个NuGet包(Microsoft.AspNet.SignalR.SelfHost.Microsoft.Owin.Cors.Topshelf)Topshelf用于快 ...
- System.Drawing Linux Centos7 The type initializer for 'Gdip' threw an exception
System.Drawing 在linux使用时提示异常 The type initializer for 'Gdip' threw an exception 解决方案: yum install au ...
- 题解 「BZOJ3636」教义问答手册
题目传送门 Description 作为泉岭精神的缔造者.信奉者.捍卫者.传承者,Pear决定印制一些教义问答手册,以满足泉岭精神日益增多的信徒.Pear收集了一些有关的诗选.语录,其中部分内容摘录在 ...
- LOJ6356 四色灯(容斥+dp
纪念第一次所有的解析全写在代码里面 QWQ 这里就简单说几句了 首先一个灯有贡献,当且仅当他被按了\(4k\)次. 那么我们定义\(f(S)\)表示\([1,n]\)中有多少个数\(x\)是集合\(S ...
- Windows用cmd编译运行Java程序
https://www.runoob.com/w3cnote/windows10-java-setup.html
- 初学Python-day12 装饰器函数
装饰器 1.概念 本质就是一个Python函数,其他函数在本身不变的情况下去增加额外的功能,装饰器的返回值是一个函数. 常用的场景:插入日志,事务处理,缓存,权限校验等. 2.普通函数回顾 1 def ...
- Redis 高阶数据类型重温
今天这个专题接着上一篇 Redis 的基本数据类型 继续讲解剩下的高阶数据类型:BitMap.HyperLogLog 和 GEO hash.这些数据结构的底层也都是基于我们前面说的 5 种 基本类型, ...
- WPF 排版基础
一.WPF 排版基础 WPF使用控制面板来进行排版,控制面板实际上是一种可以放入WPF界面元素的容器.当用户把界面元素放入控制面板后,WPF会自动把这些界面元素放在它认为合适的地方.WPF开发人员需要 ...