hdu3461Marriage Match IV 最短路+最大流
//给一个图。给定起点和终点,仅仅能走图上的最短路
//问最多有多少种走的方法。每条路仅仅能走一次
//仅仅要将在最短路上的全部边的权值改为1。求一个最大流即可
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
using namespace std ;
const int inf = 0x3f3f3f3f ;
const int maxn = 1010 ;
const int maxm = 1e5+10 ;
int head[maxn] ;
int dis[maxn] ;int n , m ;
int st , en ;int len ;
int nedge ;
int x[maxm] , y[maxm] , z[maxm];
int vis[maxm] ;
struct Edge
{
int v , w ;
int next ;
}edge[maxm<<1] ;
void addedge(int u , int v , int w)
{
edge[nedge].v = v ;
edge[nedge].w = w ;
edge[nedge].next = head[u] ;
head[u] = nedge++ ;
}
void spfa()
{
memset(vis , 0 , sizeof(vis)) ;
queue<int> que ;
for(int i = 1;i <= n;i++)
dis[i] = i == st ?
0 : inf ;
que.push(st) ;vis[st] = 1;
while(que.size())
{
int u = que.front();que.pop() ;
vis[u] = 0 ;
for(int i = head[u];i != -1 ;i = edge[i].next)
{
int v = edge[i].v ;
if(dis[u] + edge[i].w < dis[v])
{
dis[v] = dis[u] + edge[i].w ;
if(!vis[v])
{
que.push(v) ;
vis[v] = 1;
}
}
}
}
}
bool bfs()
{
memset(dis , -1 , sizeof(dis)) ;
dis[st] = 0 ;
queue<int> que ;
que.push(st) ;
while(que.size())
{
int u = que.front();que.pop() ;
for(int i = head[u];i != -1 ;i = edge[i].next)
{
int v = edge[i].v ;
if(dis[v] < 0 && edge[i].w > 0)
{
dis[v] = dis[u] + 1 ;
que.push(v) ;
}
}
}
if(dis[en] > 0)return true ;
return false ;
}
int dfs(int u , int mx)
{
if(u == en)return mx ;
int ans = 0 , a ;
for(int i = head[u];i != -1 ;i = edge[i].next)
{
int v = edge[i].v ;
if(dis[v] == dis[u] + 1 && edge[i].w > 0 && (a = dfs(v , min(mx , edge[i].w))))
{
mx -= a ;
ans += a ;
edge[i].w -= a ;
edge[i^1].w += a ;
if(!mx)break;
}
}
if(!ans)dis[u] = -1 ;
return ans ;
}
int main()
{
//freopen("in.txt" , "r" , stdin) ;
int t ;
scanf("%d" , &t) ;
while(t--)
{
scanf("%d%d" , &n , &m);
memset(head , -1 , sizeof(head)) ;
nedge = 0 ;len = 0 ;
while(m--)
{
int u , v , w ;
scanf("%d%d%d" , &u , &v , &w) ;
if(u != v)
{
addedge(u , v , w) ;
x[len] = u , y[len] = v ,z[len++] = w ;
}
}
scanf("%d%d" , &st , &en) ;
spfa() ;
memset(head , -1 , sizeof(head)) ;
nedge = 0 ;
for(int i = 0;i < len;i++)
if(dis[x[i]] + z[i] == dis[y[i]])
{
addedge(x[i] , y[i] , 1) ;
addedge(y[i] , x[i] , 0) ;
}
int ans = 0 ;
int res ;
while(bfs())
while(res = dfs(st , inf))
ans += res ;
printf("%d\n" , ans) ;
}
return 0 ;
}
hdu3461Marriage Match IV 最短路+最大流的更多相关文章
- HDU-3416 Marriage Match IV 最短路+最大流 找各最短路的所有边
题目链接:https://cn.vjudge.net/problem/HDU-3416 题意 给一个图,求AB间最短路的条数(每一条最短路没有重边.可有重复节点) 思路 首先把全部最短路的边找出来,再 ...
- hdu3416 Marriage Match IV 最短路+ 最大流
此题的大意:给定一幅有向图,求起点到终点(都是固定的)的不同的最短路有多少条.不同的最短路是说不能有相同的边,顶点可以重复.并且图含有平行边. 看了题以后,就想到暴力,但是暴力往往是不可取的.(暴力的 ...
- Marriage Match IV(最短路+网络流)
Marriage Match IV http://acm.hdu.edu.cn/showproblem.php?pid=3416 Time Limit: 2000/1000 MS (Java/Othe ...
- HDU 3416 Marriage Match IV (最短路建图+最大流)
(点击此处查看原题) 题目分析 题意:给出一个有n个结点,m条单向边的有向图,问从源点s到汇点t的不重合的最短路有多少条,所谓不重复,意思是任意两条最短路径都不共用一条边,而且任意两点之间的边只会用一 ...
- HDU 3416 Marriage Match IV (Dijkstra+最大流)
题意:N个点M条边的有向图,给定起点S和终点T,求每条边都不重复的S-->T的最短路有多少条. 分析:首先第一步需要找出所有可能最短路上的边.怎么高效地求出呢?可以这样:先对起点S,跑出最短路: ...
- HDU 3416 Marriage Match IV (最短路径&&最大流)
/*题意: 有 n 个城市,知道了起点和终点,有 m 条有向边,问从起点到终点的最短路一共有多少条.这是一个有向图,建边的时候要注意!!解题思路:这题的关键就是找到哪些边可以构成最短路,其实之前做最短 ...
- HDU 3416 Marriage Match IV (求最短路的条数,最大流)
Marriage Match IV 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/Q Description Do not si ...
- hdu 3416 Marriage Match IV (最短路+最大流)
hdu 3416 Marriage Match IV Description Do not sincere non-interference. Like that show, now starvae ...
- Q - Marriage Match IV (非重复最短路 + Spfa + 网络最大流Isap)
Q - Marriage Match IV Do not sincere non-interference. Like that show, now starvae also take part in ...
随机推荐
- listview-属性大全
<ListView <!-- 决定listview里的内容是否从底部开始 -- android:stackFromBottom="true" </Listview ...
- 96.udp通信
运行截图 客户端 创建客户端套接字,用于创建UDP通信 SOCKET socket_client; 创建UDP通信 socket_client = socket(AF_INET, SOCK_DGRAM ...
- RPC调用框架比较分析--转载
原文地址:http://itindex.net/detail/52530-rpc-%E6%A1%86%E6%9E%B6-%E5%88%86%E6%9E%90 什么是RPC: RPC(Remote Pr ...
- JavaScript 倒计时器,闹钟功能
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- uvaoj-1595:symmetry
1595 - Symmetry The figure shown on the left is left-right symmetric as it is possible to fold the s ...
- 例说linux内核与应用数据通信(一):加入一个系统调用
[版权声明:尊重原创.转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 应用不能訪问内核的内存空间.为了应用和内核交互信息,内核提供一 ...
- 微信支付v2开发(1) 微信支付URL配置
本文介绍微信支付申请时如何设置授权目录及URL. 在申请微信支付时,第一项就会碰到下图的配置. 下面就对这一设置进行讲解! 一.选择支付类型 目前有两种支付类型 JS API网页支付 Native原生 ...
- vue使用(二)
本节目标: 1.数据路径的三种方式 2.{{}}和v-html的区别 1.绑定图片的路径 方法一:直接写路径 <img src="http://p ...
- hdu 3416 Marriage Match IV (最短路+最大流)
hdu 3416 Marriage Match IV Description Do not sincere non-interference. Like that show, now starvae ...
- Android 使用XML隐藏ActionBar中遇错的解决的方法
今天我在使用Menifest.xml让程序隐藏标题栏是一直出错.主要内容是: You need to use a theme.AppCompat theme(descendant) with this ...