POJ 3204 最大流 残留网络应用
(2010-09-17 08:45:58)
标签:
poj3204最大流残留网络应用it |
分类: 网络流 |
题目描述:N个城市(500),0点是生产商,N-1点是接受城市。现在0向n-1运输商品。
其中有M条有向边,每条边有容量,表示最大的运输量。
如果一条边的容量增加导致总流量的增加,这条边就是我们需要的。问一共有多少条这样的边,输出之。
解题报告:
直观理解,求最大流后,如果某一条边的残留是0,那么这条边有可能是我们需要的边(如0->1->2->3, 容量都是1,那么没有一条边是我们需要的,所以说是“可能是”),只有源点s到这条边的起点有增广路,同时这条边的终点到汇点t也有增广路的时候,增加这条边的容量才能使总流量增加。
那么,从原点s dfs一遍得到残留网络中原点s能到达的点。同时把边反向,从汇点t出发,得t可达的点。然后扫描残留为0的每条边,看看是不是起点可达s,汇点可达t。统计这样边的数量的就是答案。
代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n, m;
#define Max 0x1fffffff
#define size 600
struct edge{int from, to, val, next;}e[100000], e2[100000];
int v[size], que[size], dis[size], cnt, cur[size], v2[size],
cnt2;
void insert(int from, int to, int va, int *v, edge *e, int
&cnt)
{
}
bool bfs(int n, int s, int t)
{
}
int Dinic(int n, int s, int t)
{