[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 ...
随机推荐
- sprintboot整合mybatis查询不出数据
数据库有数据,程序没有任何报错,但是查询结果没有数据,list显示[null,nul]. 检查了sql语句,以及controller.service.mapper,检查没发现问题,怀疑是字段映射问题. ...
- c++中的数学函数
math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有:1 三角函数double sin (double);double cos (double);double tan ( ...
- C chdir函数
chdir微软官方文档 在制作小游戏时遇到的问题:图片音频等资源文件太多,和exe同一个目录不方便集中管理 整理方案1 首先创建了一个名为"resource"的文件夹,把程序执行过 ...
- Proxypool代理池搭建
个人博客:点我 前言 项目地址 : https://github.com/jhao104/proxy_pool 这个项目是github上一个大佬基于python爬虫制作的定时获取免费可用代理并入池的代 ...
- IDEA 激活码,最新激活码,亲测有效,持续更新(2021.10.26)
这里整理了一份 IntelliJ IDEA的最新激活码,持续更新 获取链接:[腾讯文档]分享白嫖JB Account和激活码(并附带破解工具) https://docs.qq.com/doc/DVnB ...
- Java:HashMap类小记
Java:HashMap类小记 对 Java 中的 HashMap类,做一个微不足道的小小小小记 概述 HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致.由于要保证键的唯一.不重复 ...
- matplotlib散点图
我们常用的统计图如下: 1.学会绘制散点图 一个小demo: 假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规 ...
- 使用Egg改造订单系统展示效果,方便快速浏览
素材准备: 1.Egg.js Born to build better enterprise frameworks and apps with Node.js & Koa 为企业级框架和应用而 ...
- configure: error: invalid variable name: `'
今天在交叉编译一个编解码库的时候,出现一个莫名其妙的报错,一直找不到原因,后来无意中删除了一个空格,才发现就是这个空格造成的错误. ./configure --host=arm-linux LDFLA ...
- Spoj 2878 KNIGHTS - Knights of the Round Table | 双联通分量 二分图判定
题目链接 考虑建立原图的补图,即如果两个骑士不互相憎恨,就在他们之间连一条无向边. 显而易见的是,如果若干个骑士在同一个点数为奇数的环上时,他们就可以在一起开会.换句话说,如果一个骑士被一个奇环包含, ...