题意:求最短路最长公共距离。

考虑每一条边,如果满足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的路线的更多相关文章

  1. BZOJ1880: [Sdoi2009]Elaxia的路线(最短路)

    1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2049  Solved: 805 题目链接:https ...

  2. bzoj1880: [Sdoi2009]Elaxia的路线(spfa,拓扑排序最长路)

    1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1944  Solved: 759[Submit][St ...

  3. [BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA & 拓扑排序)

    Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...

  4. [luogu2149][bzoj1880][SDOI2009]Elaxia的路线【拓扑排序+最短路+DP】

    题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间 ...

  5. BZOJ1880:[SDOI2009]Elaxia的路线(最短路,拓扑排序)

    Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...

  6. BZOJ1880 [Sdoi2009]Elaxia的路线 【最短路 + dp】

    题目 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提 ...

  7. 【BZOJ1880】[Sdoi2009]Elaxia的路线(最短路)

    [BZOJ1880][Sdoi2009]Elaxia的路线(最短路) 题面 BZOJ 洛谷 题解 假装我们知道了任意两点间的最短路,那么我们怎么求解答案呢? 不难发现公共路径一定是一段连续的路径(如果 ...

  8. 【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP

    [BZOJ1880][Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起 ...

  9. 【BZOJ1880】[SDOI2009]Elaxia的路线 (最短路+拓扑排序)

    [SDOI2009]Elaxia的路线 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. \(El ...

随机推荐

  1. Js动态获取iframe子页面的高度总结

    问题的缘由 产品有个评论列表引用的是个iframe,高度不固定于是引发这个总结. 方法1:父级页面获取子级页面的高度 给元素设置高度 这方法是用在父级页面里的,通过获取子级页面的高度给iframe设置 ...

  2. 白话LINQ系列2---以代码演进方式学习LINQ必备条件

    今天,我们通过一个简单的示例代码的演进过程,来学习LINQ必备条件:隐式类型局部变量:对象集合初始化器:委托:匿名函数:lambda表达式:扩展方法:匿名类型.废话不多说,我们直接进入主题. 一.实现 ...

  3. visual Sdudio 快捷键

    项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添加 ...

  4. php程序员的水平 看看自己属于那个级别的

    文章链接:http://www.oschina.net/question/570781_60150?sort=time&p=4#answers

  5. [CCF] Z字形扫描

    CCF Z字形扫描 感觉和LeetCode中的ZigZag还是有一些不一样的. 题目描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z ...

  6. Adding List Item Element At Runtime In Oracle Forms

    Add combo list / drop down list item element at runtime in Oracle forms.SyntaxPROCEDURE ADD_LIST_ELE ...

  7. C#MVC使用二进制流显示图片

    关于显示图片的最好方法当然是img 的src直接指向地址,简单实用.但是有时候也会使用到使用图片流显示图片的方法.实现也比较简单(在C# mvc中,java的不了解).具体如下: 1.前台cshtml ...

  8. 正则表达式获取TABLE里的内容

    //过滤\n 转换成空            String withoutNString=message.Replace("\n", "");          ...

  9. JavaScript学习笔记及知识点整理_2

    1.一般而言,在Javascript中,this指向函数执行时的当前对象.举例如下: var someone = { name: "Bob", showName: function ...

  10. h.SSL协议栈整体分解

    1.SSL整体框图 SSL协议是应用层次(http协议)和TCP层级的一个可选的位置,可以从下面的图中非常清楚看到该层次: 绿色的框图就是这个SSL./TLS的位置,最右面的SSL/TLS图可以进一步 ...