九野的博客,转载请注明出处 :http://blog.csdn.net/acmmmm/article/details/11221561

题意:T个测试数据

下面n,m表示n个点m条有向带权边

m条边

问:从1-n最大流多少

测板子的题目,没啥思路

下面用的是dinic,开始没有考虑反向弧debug了好久,附赠一大坨测试数据

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cctype>
#include <queue>
#include <stdlib.h>
#include <cstdlib>
#include <math.h>
#include <set>
#include <vector>
#define inf 100000000
#define eps 1e-8
#define N 205
#define M 1050
#define ll int
using namespace std;
inline ll Max(ll a,ll b){return a>b?a:b;}
inline ll Min(ll a,ll b){return a<b?a:b;}
//M为边数 N为点数 从1-n
//M为边数 N为点数 从1-n
struct Edge{
int from,to,flow,cap, nex;
}edge[M*2];//双向边,注意RE 注意这个模版是 相同起末点的边 合并而不是去重
int head[N],edgenum;//2个要初始化-1和0
void addedge(int u,int v,int cap){//网络流要加反向弧
Edge E={u,v,0,cap,head[u]};
edge[edgenum]=E;
head[u]=edgenum++;
Edge E2={v,u,0,0,head[v]}; //这里的cap若是单向边要为0
edge[edgenum]=E2;
head[v]=edgenum++;
} int dis[N],cur[N];//距离起点的距离 cur[i]表示i点正在考虑的边 优化不再考虑已经用过的点 初始化为head
bool vis[N];
bool BFS(int Start,int End){
memset(vis,0,sizeof(vis));
memset(dis,-1,sizeof(dis));
queue<int>Q; while(!Q.empty())Q.pop();
Q.push(Start); dis[Start]=0; vis[Start]=1;
while(!Q.empty())
{
int u = Q.front(); Q.pop();
for(int i=head[u];i!=-1;i=edge[i].nex){
Edge E =edge[i];
if(!vis[E.to] && E.cap>E.flow)
{
vis[E.to]=1;
dis[E.to]=dis[u]+1;
if(E.to==End)return true;
Q.push(E.to);
}
}
}
return false;
}
int DFS(int x, int a,int End){//流入x 的流量是a
if(x==End || a==0)return a;
int flow = 0, f;
for(int& i=cur[x];i!=-1;i=edge[i].nex)
{
Edge& E = edge[i];
if(dis[x]+1 == dis[E.to] && (f = DFS(E.to , Min(a, E.cap-E.flow), End))>0 )
{
E.flow += f;
edge[ i^1 ].flow -= f;//反向边要减掉
flow += f;
a -= f;
if(a==0)break;
}
}
return flow;
}
int Maxflow(int Start,int End){
int flow=0;
while(BFS(Start,End)){
memcpy(cur,head,sizeof(head));//把head的数组复制过去
flow += DFS(Start, inf, End);
}
return flow;
}
int main() {
int T,Cas=1,n,m,i,a,b,c;scanf("%d",&T);
while (T--) {
memset(head,-1,sizeof(head));
edgenum=0;
scanf("%d %d",&n,&m);
while(m--)
{
scanf("%d %d %d",&a,&b,&c);
addedge(a,b,c);
}
printf("Case %d: %d\n",Cas++,Maxflow(1,n));
}
return 0;
} /*
99
3 2
1 2 1
2 3 1
3 3
1 2 1
2 3 1
1 3 1 3 2
1 3 2
1 3 5 3 2
1 2 456
1 2 56431 3 3
1 3 100
1 1 100
1 1 100 11 15
1 2 1
1 3 1
1 4 1
2 5 1
2 6 1
3 7 1
3 8 1
4 9 1
4 10 1
5 11 1
6 11 1
7 11 1
8 11 1
9 11 1
10 11 1 11 15
1 2 2
1 3 2
1 4 2
2 5 1
2 6 1
3 7 1
3 8 1
4 9 1
4 10 1
5 11 1
6 11 1
7 11 1
8 11 1
9 11 1
10 11 1 11 15
1 2 2
1 3 1
1 4 2
2 5 1
2 6 1
3 7 1
3 8 1
4 9 1
4 10 1
5 11 1
6 11 1
7 11 1
8 11 1
9 11 1
10 11 1 2 0 2 1
1 2 4651 4 4
1 2 10
2 1 5
2 4 20
1 3 3 4 5
1 2 10
2 1 5
2 4 20
1 3 3
3 4 1 9 10
1 5 2
2 4 6
2 3 4
1 2 9
3 9 5
5 9 4
2 3 1
4 2 1
6 7 1
3 7 2 4 4
1 2 10
1 3 2
3 4 1
2 4 1 4 4
1 2 1
1 3 1
3 4 10
2 4 10 ans:
1
2
7
0
100
3
6
5
0
4651
10
11
7
2
2 */

HDU 3549 Flow Problem(有向边网络流)的更多相关文章

  1. 网络流 HDU 3549 Flow Problem

    网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...

  2. HDU 3549 Flow Problem(最大流)

    HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...

  3. hdu 3549 Flow Problem

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Description Network flow is a well- ...

  4. hdu 3549 Flow Problem【最大流增广路入门模板题】

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Time Limit: 5000/5000 MS (Java/Others ...

  5. HDU 3549 Flow Problem 网络流(最大流) FF EK

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  6. hdu 3549 Flow Problem Edmonds_Karp算法求解最大流

    Flow Problem 题意:N个顶点M条边,(2 <= N <= 15, 0 <= M <= 1000)问从1到N的最大流量为多少? 分析:直接使用Edmonds_Karp ...

  7. hdu 3549 Flow Problem (网络最大流)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  8. HDU 3549 Flow Problem (最大流ISAP)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  9. hdu 3549 Flow Problem (Dinic)

    Flow ProblemTime Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

随机推荐

  1. 分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map

    原文:分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map import java.util.Map; import org.apache.commons.lang.Ar ...

  2. 某网站经纬度Decode

    <script type="text/javascript">$pi={"cid":2,"cn":"beijing&q ...

  3. [置顶] getline函数-linux

    头文件: #include <stdio.h> 函数: ssize_t getline(char **lineptr, size_t *n, FILE *stream); eg: ssiz ...

  4. 不可表示的数[x/2] + y + x * y

    前端是时间在庞果网上看到不可表示的数的编程题(如下),我自己也试着解答了一下,写的算法虽然没有没有错,但是跑了一些还只是跑到a8,后来到自己整理一下网上的解答过程,虽然解答写的很清晰,但是有些知识还是 ...

  5. [置顶] think in java interview-高级开发人员面试宝典(八)

    面经出了7套,收到许多读者的Email,有许多人说了,这些基础知识是不是为了后面进一步的”通向架构师的道路“做准备的? 对的,你们没有猜错,就是这样的,我一直在酝酿后面的”通向架构师的道路“如何开章. ...

  6. WCF技术剖析之十六:数据契约的等效性和版本控制

    原文:WCF技术剖析之十六:数据契约的等效性和版本控制 数据契约是对用于交换的数据结构的描述,是数据序列化和反序列化的依据.在一个WCF应用中,客户端和服务端必须通过等效的数据契约方能进行有效的数据交 ...

  7. 符号文件(.pdb)——Windows 应用程序调试必备

    最近在做项目需求过程中,时不时会遇到崩溃,总是异常中断,于是学习了windbg进行调试的一些基础,windbg在接下来文章进行更新,先介绍在windbg调试中一个重要文件(符号文件) 一.符号文件定义 ...

  8. [置顶] Android框架攻击之Fragment注入

    为了适应越来越大的设备屏幕,Android在3.X后引入了Fragment概念,作用是可以在一个屏幕上同时显示多个Activity,以达到充分利用屏幕的目的.关于Fragment的使用说明,可以阅读& ...

  9. 多屏广告技术调研 & 广告基础介绍

    之前做的多屏广告产品调研,并简单介绍了一些基础广告知识.见ppt:多屏广告技术调研

  10. perl eval函数

    29.2.32 eval • eval BLOCK • eval EXPR • eval eval 关键字在Perl 里起两种不同的但相关的作用.这些目的是用两种形式的语法 来表现的, eval BL ...