Flow Problem HDU - 3549
Flow Problem HDU - 3549
InputThe first line of input contains an integer T, denoting the number of test cases.
For each test case, the first line contains two integers N and M, denoting the number of vertexes and edges in the graph. (2 <= N <= 15, 0 <= M <= 1000)
Next M lines, each line contains three integers X, Y and C, there is an edge from X to Y and the capacity of it is C. (1 <= X, Y <= N, 1 <= C <= 1000)OutputFor each test cases, you should output the maximum flow from source 1 to sink N.Sample Input
- 2
- 3 2
- 1 2 1
- 2 3 1
- 3 3
- 1 2 1
- 2 3 1
- 1 3 1
Sample Output
- Case 1: 1
- Case 2: 2
- 题意:网络流模版题,1到n的结点的最大的流
思路:用dinic
- #include<stdio.h>
- #include<iostream>
- #include<map>
- #include<string.h>
- #include<queue>
- #include<vector>
- #include<math.h>
- #include<algorithm>
- #define inf 0x3f3f3f3f
- using namespace std;
- int dis[];
- int flow[][];
- int n,m;
- int bfs()
- {
- memset(dis,-,sizeof(dis));
- queue<int>Q;
- dis[]=;
- Q.push();
- while(!Q.empty())
- {
- int top=Q.front();
- Q.pop();
- for(int i=;i<=n;i++)
- {
- if(flow[top][i]>&&dis[i]<)
- {
- dis[i]=dis[top]+;
- Q.push(i);
- }
- }
- }
- if(dis[n]>)return ;
- return ;
- }
- int dinic(int x,int k)
- {
- if(x==n)
- return k;
- int y;
- for(int i=;i<=n;i++)
- {
- if(flow[x][i]>&&dis[i]==dis[x]+&&(y=dinic(i,min(k,flow[x][i]))))
- {
- flow[x][i]-=y;
- flow[i][x]+=y;
- return y;
- }
- }
- return ;
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- int cas=;
- while(t--)
- {
- memset(flow,,sizeof(flow));
- scanf("%d%d",&n,&m);
- int a,b,c;
- for(int i=;i<m;i++)
- {
- scanf("%d%d%d",&a,&b,&c);
- flow[a][b]+=c;
- }
- int ans=;
- while(bfs())
- {
- //cout<<"++"<<endl;
- int res;
- while(res=dinic(,inf))ans+=res;
- }
- printf("Case %d: %d\n",cas++,ans);
- }
- }
用sap加邻接矩阵,maze那里是叠加,不是覆盖
- #include<cstdio>
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- #include<sstream>
- #include<cmath>
- #include<stack>
- #include<cstdlib>
- #include <vector>
- #include<queue>
- using namespace std;
- #define ll long long
- #define llu unsigned long long
- #define INF 0x3f3f3f3f
- #define PI acos(-1.0)
- const int maxn = 1e3+;
- const int mod = 1e9+;
- int maze[maxn][maxn];
- int gap[maxn],dis[maxn],pre[maxn],cur[maxn];
- int sap(int start,int end ,int nodenum)
- {
- memset(cur,,sizeof cur);
- memset(dis,,sizeof dis);
- memset(gap,,sizeof gap);
- int u = pre[start] = start,maxflow = ,aug = -;
- gap[] = nodenum;
- while(dis[start] < nodenum)
- {
- loop:
- for(int v = cur[u];v < nodenum; v++)
- if(maze[u][v] && dis[u] == dis[v] + ){
- if(aug == - || aug > maze[u][v])
- aug = maze[u][v];
- pre[v] = u;
- u = cur[u] = v;
- if(v == end)
- {
- maxflow += aug;
- for(u = pre[u]; v!=start;v=u,u=pre[u])
- {
- maze[u][v] -= aug;
- maze[v][u] += aug;
- }
- aug = -;
- }
- goto loop;
- }
- int mindis = nodenum - ;
- for(int v = ;v<nodenum;v++)
- if(maze[u][v] && mindis > dis[v])
- {
- cur[u] = v;
- mindis = dis[v];
- }
- if((--gap[dis[u]]) == )
- break;
- gap[dis[u] = mindis + ]++;
- u = pre[u];
- }
- return maxflow;
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- for(int ca = ;ca <= t; ca++)
- {
- memset(maze,,sizeof maze);
- int n,m;
- scanf("%d%d",&n,&m);
- for(int i=;i<m;i++)
- {
- int a,b,l;
- scanf("%d%d%d",&a,&b,&l);
- maze[a-][b-] += l;
- }
- int res = sap(,n-,n);
- printf("Case %d: %d\n",ca,res);
- }
- }
Flow Problem HDU - 3549的更多相关文章
- HDU 3549 Flow Problem(最大流)
HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- hdu 3549 Flow Problem
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Description Network flow is a well- ...
- hdu 3549 Flow Problem【最大流增广路入门模板题】
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Time Limit: 5000/5000 MS (Java/Others ...
- 网络流 HDU 3549 Flow Problem
网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...
- hdu 3549 Flow Problem Edmonds_Karp算法求解最大流
Flow Problem 题意:N个顶点M条边,(2 <= N <= 15, 0 <= M <= 1000)问从1到N的最大流量为多少? 分析:直接使用Edmonds_Karp ...
- HDU 3549 Flow Problem 网络流(最大流) FF EK
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 3549 Flow Problem (网络最大流)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- HDU 3549 基础网络流EK算法 Flow Problem
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit ...
- HDU 3549 Flow Problem (最大流ISAP)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
随机推荐
- php 转码函数 你还在用iconv吗?-- 解决sqlserver插入中文失败问题
文章来源 :http://www.veryhuo.com/a/view/41348.html 这次给客户同步sqlserver数据,临时搭的 PHP Query Analyzer 插入某些中文一直有些 ...
- using System.Web.Script.Serialization
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...
- 【踩坑】socket.io服务器不能访问
今天在单机测试socket.io服务器时一切正常,但用jar包的方式部署在服务器时发现客户端无法连接. 于是做了一系列排查,如检查端口是否在占用,防火墙有没有开放该端口,阿里云终端是否有开放安全组,本 ...
- vue+element-ui实现cookie登录
//效果 //login.vue <template> <div> <el-form :model="ruleForm" :rules="r ...
- xaml实现无边框窗口
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/w ...
- uLua学习之读取外部Lua脚本(四)
前言 上节说到了Lua脚本与unity3d中C#脚本的数据交互,但是我感觉上节中的数理方式不太好,因为我们是把Lua脚本以字符串形式粘贴到C#脚本中的,如果读取配置数据都这样做的话,那就太可怕了.想想 ...
- python super用法
普通继承 class FooParent(object): def __init__(self): self.parent = 'I\'m the parent.' print 'Parent' de ...
- C#之linq
本文根据30分钟LINQ教程学习作的笔记. 1.Guid.Empty Guid 结构: 表示全局唯一标识符 (GUID).Empty字段:Guid 结构的只读实例,其值均为零.用来设置初始值. G ...
- LeetCode Move Zeroes (简单题)
题意: 给定一个整型数组nums,要求将其中所有的0移动到末尾,并维护所有非0整数的相对位置不变. 思路: 扫一遍,两个指针维护0与非0的交界,将非0的数向前赋值就行了. C++ class Solu ...
- IOS 隐式动画(非Root Layer)
● 每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root Layer(根 层) ● 所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动 ...