BZOJ1880: [Sdoi2009]Elaxia的路线
题意:求最短路最长公共距离。
考虑每一条边,如果满足dis(s1,u)+len+dis(v,t1)==dis(s1,t1) && dis(s2,u)+len+dis(v,t2)==dis(s2,t2) 则该边在公共最短路上
拓扑排序dp下即可
#include<bits/stdc++.h>
using namespace std;
#define N 1505
#define INF 1e9
int n,m,a[],dis[][N],cnt,cnt1,head[N],head1[N],r[N],ans[N],fin;
bool y[N];
struct data{
int num,v;
bool operator < (const data& w)const{
return v>w.v;
}
};
priority_queue<data>q;
inline int read(){
int x=,f=; char a=getchar();
while(a<'' || a>'') {if(a=='-') f=-; a=getchar();}
while(a>='' && a<='') x=x*+a-'',a=getchar();
return x*f;
}
struct edges{
int fr,to,v,next;
}e[],e1[];
void inser(int u,int v,int c){
e[cnt]=(edges){u,v,c,head[u]};head[u]=cnt++;
e[cnt]=(edges){v,u,c,head[v]};head[v]=cnt++;
}
void ins(int u,int v,int c){
if(dis[][u]>dis[][v]) swap(u,v);
e1[cnt1]=(edges){u,v,c,head1[u]};head1[u]=cnt1++; r[v]++;
}
void dj(int x){
dis[x][a[x]]=; memset(y,,sizeof(y));q.push((data){a[x],});
int s,to;
while(!q.empty()){
s=q.top().num; q.pop();
if(y[s]) continue; y[s]=;
for(int i=head[s];i>=;i=e[i].next){
if(y[e[i].to]) continue; to=e[i].to;
if(dis[x][to]>dis[x][s]+e[i].v) dis[x][to]=dis[x][s]+e[i].v,q.push((data){to,dis[x][to]});
}
}
}
void topsort(int x){
r[x]--;
for(int i=head1[x];i>=;i=e1[i].next){
ans[e1[i].to]=max(ans[e1[i].to],ans[x]+e1[i].v);
fin=max(ans[e1[i].to],fin);
r[e1[i].to]--; if(!r[e1[i].to]) topsort(e1[i].to);
}
}
int main(){
n=read(); m=read();
memset(dis,,sizeof(dis));
memset(head,-,sizeof(head));
memset(head1,-,sizeof(head1));
for(int i=;i<=;i++) a[i]=read();
for(int u,v,c,i=;i<=m;i++)
u=read(),v=read(),c=read(),inser(u,v,c);
for(int i=;i<=;i++) dj(i);
for(int i=;i<cnt;i+=){
int u=e[i].fr,v=e[i].to;
if((dis[][u]+e[i].v+dis[][v]==dis[][a[]] || dis[][v]+e[i].v+dis[][u]==dis[][a[]]) && (dis[][u]+e[i].v+dis[][v]==dis[][a[]] || dis[][v]+e[i].v+dis[][u]==dis[][a[]]))
ins(u,v,e[i].v);
}
for(int i=;i<=n;i++)
if(!r[i]) topsort(i);
printf("%d\n",fin);
return ;
}
BZOJ1880: [Sdoi2009]Elaxia的路线的更多相关文章
- BZOJ1880: [Sdoi2009]Elaxia的路线(最短路)
1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2049 Solved: 805 题目链接:https ...
- bzoj1880: [Sdoi2009]Elaxia的路线(spfa,拓扑排序最长路)
1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1944 Solved: 759[Submit][St ...
- [BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA & 拓扑排序)
Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...
- [luogu2149][bzoj1880][SDOI2009]Elaxia的路线【拓扑排序+最短路+DP】
题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间 ...
- BZOJ1880:[SDOI2009]Elaxia的路线(最短路,拓扑排序)
Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...
- BZOJ1880 [Sdoi2009]Elaxia的路线 【最短路 + dp】
题目 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提 ...
- 【BZOJ1880】[Sdoi2009]Elaxia的路线(最短路)
[BZOJ1880][Sdoi2009]Elaxia的路线(最短路) 题面 BZOJ 洛谷 题解 假装我们知道了任意两点间的最短路,那么我们怎么求解答案呢? 不难发现公共路径一定是一段连续的路径(如果 ...
- 【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP
[BZOJ1880][Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起 ...
- 【BZOJ1880】[SDOI2009]Elaxia的路线 (最短路+拓扑排序)
[SDOI2009]Elaxia的路线 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. \(El ...
随机推荐
- C#文件与流(FileStream、StreamWriter 、StreamReader 、File、FileInfo、Directory、directoryInfo、Path、Encoding)
(FileStream.StreamWriter .StreamReader .File.FileInfo.Directory.DirectoryInfo.Path.Encoding) C#文 ...
- 20. 星际争霸之php设计模式--适配器模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- mysql limit查询优化
mysql数据库中的查询语句有关limit语句的优化. 一般limit是用在分页的程序的分页上的,当应用数据量够小时,也许感觉不到limit语句的任何问题,但当查询数据量达到一定程度时,limit的性 ...
- 如何写出优雅的Python之设置class缺省值
今天有个需求时需要为某个类设置缺省值 最开始的代码如下: Class myClass def __init__(self,datalen=None,times=None): if datalen == ...
- URL编码与解码
在项目中碰到了ajax传来的参数,后台接收值乱码(如下图)的问题 在此记录一下 前台: 后台: 解决问题 为什么需要编码 怎样编码 实际出现的问题解决方法 1.为什么需要编码? URL 只能使用 AS ...
- 关于webservice大数据量传输时的压缩和解压缩
当访问WebSerivice时,如果数据量很大,传输数据时就会很慢.为了提高速度,我们就会想到对数据进行压缩.首先我们来分析一下. 当在webserice中传输数据时,一般都采用Dataset进行数据 ...
- LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
·First - 返回集合中的第一个元素:不延迟 ·FirstOrDefault - 返回集合中的第一个元素(如果没有则返回默认值):不延迟 ·Last - 返回集合中的最后一个元素:不延迟 ·Las ...
- [已解决] java.net.InetAddress.getHostName() 阻塞问题
在学习java nio的过程中发现某些情况下使用该方法会导致程序阻塞,(情况:服务器,Linux:客户端,WIN10) java.net.InetAddress.getHostName() 阻塞情况如 ...
- Linux 各文件夹介绍
http://www.cnblogs.com/amboyna/archive/2008/02/16/1070474.html linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命 ...
- 【Redis】Redis的基本安装及使用
在Linux上安装Redis Redis的安装很简单.基本上是下载.解压.运行安装脚本.我用的Redis版本是3.2.1. [nicchagil@localhost app]$ wget -q htt ...