hdu4292网络流dinic
因为数组开小了,导致tle了一整天:(
tle的几点原因:http://blog.csdn.net/ameir_yang/article/details/53698478
思路都是对的,把每个人进行拆点,和dining那题差不多,加一个超级源一个超级汇
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=,inf=; struct Node {
int to,next,cap;
}e[maxn];
int s,t,cnt,dis[N];
int head[N];
void add(int u,int v,int c)
{
e[cnt].to=v;
e[cnt].cap=c;
e[cnt].next=head[u];
head[u]=cnt++;
e[cnt].to=u;
e[cnt].cap=;
e[cnt].next=head[v];
head[v]=cnt++;
}
bool bfs()
{
memset(dis,-,sizeof dis);
dis[s]=;
queue<int>q;
q.push(s);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=head[x];i!=-;i=e[i].next)
{
int temp=e[i].to;
if(dis[temp]==-&&e[i].cap>)
{
dis[temp]=dis[x]+;
q.push(temp);
}
}
}
return dis[t]!=-;
}
int dfs(int x,int mx)//a是找到的增广路上最小的流量
{
if(x==t)return mx;
int flow=;
for(int i=head[x];i!=-;i=e[i].next)
{
int temp=e[i].to,f;
if(dis[temp]==dis[x]+&&e[i].cap>&&(f=dfs(temp,min(mx,e[i].cap))))
{
e[i].cap-=f;
e[i^].cap+=f;
return f;
}
}
dis[x]=-;
return ;
}
int max_flow()
{
int ans=,f;
while(bfs()){
while((f=dfs(s,inf)))ans+=f;
}
return ans;
}
int main()
{
/* ios::sync_with_stdio(false);
cin.tie(0);*/
int n,f,d,a;
char op;
while(~scanf("%d%d%d",&n,&f,&d)){
cnt=;
memset(head,-,sizeof head);
s=,t=f+d+*n+;
for(int i=;i<=f;i++)
{
scanf("%d",&a);
add(,i,a);
}
for(int i=;i<=d;i++)
{
scanf("%d",&a);
add(f+*n+i,f+*n+d+,a);
}
for(int i=;i<=n;i++)
{
getchar();
for(int j=;j<=f;j++)
{
scanf("%c",&op);
if(op=='Y')add(j,f+i,);
}
}
for(int i=;i<=n;i++)
{
getchar();
add(f+i,f+i+n,);
for(int j=;j<=d;j++)
{
scanf("%c",&op);
if(op=='Y')add(f+n+i,f+*n+j,);
}
}
int ans=max_flow();
printf("%d\n",ans);
}
return ;
}
顺便把dining的dinic写法加上来
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=,inf=; struct Node {
int to,next,cap;
}e[N*];
int s,t,cnt,dis[N<<];
int head[N<<];
void add(int u,int v,int c)
{
e[cnt].to=v;
e[cnt].cap=c;
e[cnt].next=head[u];
head[u]=cnt++;
e[cnt].to=u;
e[cnt].cap=;
e[cnt].next=head[v];
head[v]=cnt++;
}
bool bfs()
{
memset(dis,-,sizeof dis);
dis[s]=;
queue<int>q;
q.push(s);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=head[x];i!=-;i=e[i].next)
{
int temp=e[i].to;
if(dis[temp]==-&&e[i].cap>)
{
dis[temp]=dis[x]+;
q.push(temp);
}
}
}
return dis[t]!=-;
}
int dfs(int x,int mx)//a是找到的增广路上最小的流量
{
if(x==t)return mx;
int flow=;
for(int i=head[x];i!=-;i=e[i].next)
{
int temp=e[i].to,f;
if(dis[temp]==dis[x]+&&e[i].cap>&&(f=dfs(temp,min(mx-flow,e[i].cap))))
{
e[i].cap-=f;
e[i^].cap+=f;
flow+=f;
}
}
if(!flow)dis[x]=-;
return flow;
}
int max_flow()
{
int ans=,f;
while(bfs()){
while((f=dfs(s,inf)))ans+=f;
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int n,f,d;
while(cin>>n>>f>>d){
cnt=;
memset(head,-,sizeof head);
for(int i=;i<=f;i++)add(,i,);
for(int i=;i<=d;i++)add(f+*n+i,f+*n+d+,);
for(int i=;i<=n;i++)
{
int a,b,k;
cin>>a>>b;
while(a--){
cin>>k;
add(k,f+i,);
}
while(b--){
cin>>k;
add(f+n+i,f+*n+k,);
}
}
for(int i=;i<=n;i++)add(f+i,f+i+n,);
s=,t=f+d+*n+;
int ans=max_flow();
cout<<ans<<endl;
}
return ;
}
hdu4292网络流dinic的更多相关文章
- POJ 1273 Drainage Ditches (网络流Dinic模板)
Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...
- ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)
//有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...
- 网络流Dinic(本篇介绍最大流)
前言:看到网上Dinic和ISAP的比较,多数人认为ISAP更快,不容易爆栈.当然,也有少数人认为,在多数情况下,Dinic比较稳定.我认为Dinic的思路比ISAP更简明,所以选择了Dinc算法 介 ...
- 模板——网络流Dinic
感谢这位大佬的博客:https://www.cnblogs.com/SYCstudio/p/7260613.html 给予了我莫大的帮助! 主要说一下网络流的几个注意点: 1.和二分图匹配相似,无法继 ...
- 最大网络流dinic
初始化flow(最大流量)为INF(极大值),建边(正向弧和反向弧) bfs寻找增广路看看有没有路,顺便进行深度标号.如果没有路直接结束输出flow. 如果有,我们按照深度dfs.dfs时注意在给正向 ...
- 网络流dinic实现总结
太羞耻了,搞了半天居然没发现自己写的不是dinic,直到被一道时限紧的题目卡掉才发现 int dfs(int now,int flow,int sum) { if(now==n) return flo ...
- poj 1459 Power Network : 最大网络流 dinic算法实现
点击打开链接 Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20903 Accepted: ...
- POJ 1273 Drainage Ditches(网络流dinic算法模板)
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...
- 高效的网络流dinic算法模版
#include <cstring> #include <algorithm> #include <vector> #define Maxn 120010 #def ...
随机推荐
- CentOS7使用yum安装nginx
CentOS默认没有nginx的yum源需要yum安装nginx可以使用一下方法 一,环境检测 二,设置yum源 rpm -Uvh http://nginx.org/packages/centos/7 ...
- SmartSprites 智能批量合并 CSS 雪碧图
做前端的稍微有点经验的都知道 可以通过合并小图片 来减少请求数, 最早可能都是通过 fw.ps 等工具来手动合并, 这种方式的缺点就不吐槽了,效率低,可维护性差 等等 .... 一些很厉害的人,往往会 ...
- CRM - 销售与客户
一.销售与客户 - 表结构 ---公共客户(公共资源) 1.没有报名 2.3天没有跟进 3.15天没有成单 客户分布表 龙泰 男 yuan 2018-5-1 3天未跟进 龙泰 男 三江 2018-5- ...
- SQL Server 不同网段IP通过名称访问
1, 设置订阅服务器C:\Windows\System32\drivers\etc目录的host文件,添加分发服务器(我的环境是发布服务器与分发服务器 是一起的,所以这里指定的是发布服务器的地址)信息 ...
- spring boot开启事务管理,使用事务的回滚机制,使两条插入语句一致
spring boot 事务管理,使用事务的回滚机制 1:配置事务管理 在springboot 启动类中添加 @EnableTransactionManagement //开启事务管理 @Enable ...
- [py]多态的理解
多态 不同的数据类型,执行相同的方法,产生的状态不同 不同对象调用相同的方法(运行时候的绑定状态) #!/usr/bin/env python # coding=utf-8 class H2O: de ...
- PAT 1117 Eddington Number [难]
1117 Eddington Number (25 分) British astronomer Eddington liked to ride a bike. It is said that in o ...
- 数据挖掘-逻辑Logistic回归
逻辑回归的基本过程:a建立回归或者分类模型--->b 建立代价函数 ---> c 优化方法迭代求出最优的模型参数 --->d 验证求解模型的好坏. 1.逻辑回归模型: 逻辑回归(L ...
- viewport 编写 iPhone Friendly 的 Web 应用程序
在了解到iPhone的一些常见布局法后,我们就可以开始着手编写一个真正能在iPhone上跑的页面了.小声说一句,之前我说要布局讨论完了,要进入交互逻辑开发,后来细心一想发现不行,有些东西不讲的话将会对 ...
- 92. Reverse Linked List II(链表部分反转)
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...