ZOJ2760_How Many Shortest Path
给一个图,求从某个点到另一个点的最短路有多少条?所有的路都不共边。
首先从终点开始Spfa标记最短距离,然后建图。
建图的时候,如果满足两点之间的最短路只差为两点之间的边长,那么在网络流的模型中连接一条边。
最终也只需要跑最大流即可。
注意此题没有要求不能经过同一个点,所有不需要拆点,由于我们在网络流的模型中间加边的时候边容量为1,也就保证了每条边只遍历一边了。
注意,有可能两个不同点之间的距离也为0,真是深坑啊,无法直视。
召唤代码君:
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 111
#define maxm 44444
typedef long long ll;
using namespace std; ll inf=~0U>>;
ll to[maxm],next[maxm],c[maxm],first[maxn],edge;
ll d[maxn],tag[maxn],TAG=;
ll Q[maxm],bot,top;
ll ans,n,s,t;
ll dis[maxn][maxn],f[maxn];
bool can[maxn]; void _input()
{
for (ll i=; i<=n; i++)
{
f[i]=inf,first[i]=-;
for (ll j=; j<=n; j++) scanf("%lld",&dis[i][j]);
}
scanf("%lld%lld",&s,&t);
s++,t++;
Q[bot=top=]=t,f[t]=;
while (bot<=top)
{
ll cur=Q[bot++];
for (ll i=; i<=n; i++)
if (dis[i][cur]>= && f[cur]+dis[i][cur]<f[i])
f[i]=f[cur]+dis[i][cur],Q[++top]=i;
}
} void addedge(ll U,ll V)
{
edge++;
to[edge]=V,c[edge]=,next[edge]=first[U],first[U]=edge;
edge++;
to[edge]=U,c[edge]=,next[edge]=first[V],first[V]=edge;
} void build_graph()
{
edge=-;
for (int i=; i<=n; i++)
for (int j=; j<=n; j++)
if (i!=j && dis[i][j]>= && f[i]==f[j]+dis[i][j])
addedge(i,j);
} bool bfs()
{
Q[bot=top=]=t,d[t]=,tag[t]=++TAG,can[t]=false;
while (bot<=top)
{
ll cur=Q[bot++];
for (ll i=first[cur]; i!=-; i=next[i])
if (c[i^]> && tag[to[i]]!=TAG)
{
tag[to[i]]=TAG,can[to[i]]=false;
d[to[i]]=d[cur]+,Q[++top]=to[i];
if (to[i]==s) return true;
}
}
return false;
} ll dfs(ll cur,ll num)
{
if (cur==t) return num;
ll tmp=num,k;
for (ll i=first[cur]; i!=-; i=next[i])
if (c[i]> && tag[to[i]]==TAG && d[to[i]]==d[cur]- && !can[to[i]])
{
k=dfs(to[i],min(num,c[i]));
if (k) num-=k,c[i]-=k,c[i^]+=k;
if (num==) break;
}
if (num) can[cur]=true;
return tmp-num;
} int main()
{
inf*=inf;
while (scanf("%lld",&n)!=EOF)
{
_input();
if (s==t)
{
puts("inf");
continue;
}
build_graph();
for (ans=; bfs(); ) ans+=dfs(s,inf);
printf("%lld\n",ans);
}
return ;
}
ZOJ2760_How Many Shortest Path的更多相关文章
- hdu-----(2807)The Shortest Path(矩阵+Floyd)
The Shortest Path Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- zoj 2760 How Many Shortest Path 最大流
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1760 Given a weighted directed graph ...
- The Shortest Path in Nya Graph
Problem Description This is a very easy problem, your task is just calculate el camino mas corto en ...
- hdu 3631 Shortest Path(Floyd)
题目链接:pid=3631" style="font-size:18px">http://acm.hdu.edu.cn/showproblem.php?pid=36 ...
- Shortest Path(思维,dfs)
Shortest Path Accepts: 40 Submissions: 610 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: ...
- Shortest Path
Shortest Path Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- (中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。
Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...
- 【ZOJ2760】How Many Shortest Path
How Many Shortest Path 标签: 网络流 描述 Given a weighted directed graph, we define the shortest path as th ...
- [Swift]LeetCode847. 访问所有节点的最短路径 | Shortest Path Visiting All Nodes
An undirected, connected graph of N nodes (labeled 0, 1, 2, ..., N-1) is given as graph. graph.lengt ...
随机推荐
- 3、ObjectARX开发创建直线、圆、圆弧和修改对象属性
一.本节课程 Arx二次开发创建直线.圆.圆弧和修改对象属性 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建直线. 2.如何应用C++ ARX二次开发创建圆. 3.如何应用C++ AR ...
- 基于Centos7的比特币源码编译
因为一直比较熟悉Windows平台的开发,本来打算在windows下进行编译,但查了一些文章,发现还是在linux下编译成本最低,所以这里就以手头现有的Centos7环境进行代码编译. 一.代码获 ...
- [Processing]点到线段的最小距离
PVector p1,p2,n; float d = 0; void setup() { size(600,600); p1 = new PVector(150,30);//线段第一个端点 p2 = ...
- play-with-vim1~5
1.移动 h,j,k,l分别对应左下上右 2.模式 vim有四种模式:普通模式,插入模式,可视模式,命令行模式 进入vim 默认为普通模式,光标为方块 输入i 进入插入模式,窗口左下角为insert ...
- Linux下出现permission denied的解决办法
Linux下经常出现permission denied,原因是由于权限不足,有很多文章通过chmod命令更改权限为777,但是很不方便也不适合新手,简单粗暴的方法如下: 命令行中输入 sudo pas ...
- Kafka科普系列 | Kafka中的事务是什么样子的?
事务,对于大家来说可能并不陌生,比如数据库事务.分布式事务,那么Kafka中的事务是什么样子的呢? 在说Kafka的事务之前,先要说一下Kafka中幂等的实现.幂等和事务是Kafka 0.11.0.0 ...
- UI设计学习笔记(7-12)
UI学习笔记(7)--扁平化图标 认识扁平化 Flat Design 抛弃传统的渐变.阴影.高光等拟真视觉效果,打造看上去更平的界面.(颜色.形状) 扁平化图标有什么优缺点 优点: 简约不简单.有新鲜 ...
- 基于Linux-3.9.4内核增加简单的时间片轮转功能
简单的时间片轮转多道程序内核代码 原创作品转载请注明出处https://github.com/mengning/linuxkernel/ 作者:sa18225465 一.安装 Linux-3.9.4 ...
- Apache 性能配置优化
前言 最近在进行apache性能优化设置.在修改apache配置)文件之前需要备份原有的配置文件夹conf,这是网站架设的好习惯.以下的apache配置调优均是在red had的环境下进行的. htt ...
- logout命令详解
基础命令学习目录首页 logout指令让用户退出系统,其功能和login指令相互对应.语法 logout