有趣啊

先spfa分别求出以s1,t1,s2,t2为起点的最短路,然后把在s1-->t1或者s2-->t2最短路上的边重新建有向图,跑拓扑最长路即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int N=1505,inf=1e9;
int n,m,x1,x2,y1,y2,d[N],dis[N],h[N],cnt,s1[N],s2[N],t1[N],t2[N];
bool v[N];
struct qwe
{
int ne,no,to,va;
}e[1000005];
struct bian
{
int u,v,w;
bian(int U=0,int V=0,int W=0)
{
u=U,v=V,w=W;
}
};
vector<bian>ve;
void add(int u,int v,int w)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].no=u;
e[cnt].to=v;
e[cnt].va=w;
h[u]=cnt;
}
void spfa(int s,int dis[])
{
queue<int>q;
for(int i=1;i<=n;i++)
dis[i]=inf,v[i]=0;
dis[s]=0;
v[s]=1;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
v[u]=0;
for(int i=h[u];i;i=e[i].ne)
if(dis[e[i].to]>dis[u]+e[i].va)
{
dis[e[i].to]=dis[u]+e[i].va;
if(!v[e[i].to])
{
v[e[i].to]=1;
q.push(e[i].to);
}
}
}
}
int main()
{
scanf("%d%d%d%d%d%d",&n,&m,&x1,&y1,&x2,&y2);
for(int i=1,x,y,v;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&v);
add(x,y,v),add(y,x,v);
}
spfa(x1,s1);
spfa(y1,t1);
spfa(x2,s2);
spfa(y2,t2);
for(int i=1;i<=cnt;i+=2)
if(min(s1[e[i].no],s1[e[i].to])+min(t1[e[i].to],t1[e[i].no])+e[i].va==s1[y1]&&min(s2[e[i].no],s2[e[i].to])+min(t2[e[i].no],t2[e[i].to])+e[i].va==s2[y2])
{
if(s1[e[i].no]<s1[e[i].to])
ve.push_back(bian(e[i].no,e[i].to,e[i].va));
else
ve.push_back(bian(e[i].to,e[i].no,e[i].va));
}
memset(h,0,sizeof(h));
cnt=0;
for(int i=0;i<ve.size();i++)
add(ve[i].u,ve[i].v,ve[i].w),d[ve[i].v]++;
queue<int>q;
for(int i=1;i<=n;i++)
{
dis[i]=0;
if(!d[i])
q.push(i);
}
int ans=0;
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=h[u];i;i=e[i].ne)
{
dis[e[i].to]=max(dis[e[i].to],dis[u]+e[i].va);
ans=max(ans,dis[e[i].to]);
d[e[i].to]--;
if(!d[e[i].to])
q.push(e[i].to);
}
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. PHP使用libevent实现高性能httpServer
  2. 【BZOJ】【3157】&amp;【BZOJ】【3516】国王奇遇记
  3. CURL与PHP-CLI的应用【CLI篇】
  4. win7重装系统的配置步骤
  5. Linux chmod命令具体解释
  6. Java语言与C语言之间的应用比较
  7. linux执行sh报错:$’\r’: 未找到命令的解决
  8. 网络游戏开发-服务器(01)Asp.Net Core中的websocket,并封装一个简单的中间件
  9. ionic 禁用 手势 滑动返回
  10. Bootstrap3 栅格系统-栅格参数
  11. 斑马打印机的安装调试,生成PDF
  12. Socket 通讯原理
  13. JavaScript 里 var a =a ||{}
  14. java 结合反射、泛型、注解获取泛型对象
  15. 关于WARN Dispatcher:68 - Could not find action or result报错
  16. c#List数组移除元素
  17. 获取SQL Server数据库中的表和字段描述
  18. hdu 5012 模拟+bfs
  19. python3学习笔记.4.turtle绘图
  20. iOS NSString去除其他字符(空格回车符)

热门文章

  1. Heredoc和Nowdoc
  2. python学习之-- shutil模块
  3. HDU 6437 最(大) 小费用最大流
  4. 最近公共祖先(Least Common Ancestors)
  5. HDU 1896 【留个使用priority_queue容器的样例】
  6. Ubuntu 16.04安装双显卡驱动方法收集
  7. 碧砚适合佳能328 4452 ICD520 4472 4450 硒鼓4700一体机墨盒4770
  8. WebLogic中&quot;域&quot;的概念
  9. tomcat的安装和使用
  10. C#编程语言及.NET 平台快速入门指南