博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4292(拆点+最大流)
阅读量:5832 次
发布时间:2019-06-18

本文共 2337 字,大约阅读时间需要 7 分钟。

题目链接:

思路:为了控制一个人只连一瓶饮料,一份食物,那么我们可以把一个人拆成两个,他们之间连一条权值为1的边,另外左边连它喜欢的食物,权值为1,右边连它喜欢的饮料,权值为1,在起点连食物的时候加流量限制,终点加流量限制,跑一遍最大流即可。

View Code
1 #include
2 #include
3 #include
4 using namespace std; 5 #define MAXN 1111 6 #define MAXM 88888888 7 struct Edge{ 8 int v,cap,next; 9 }edge[MAXM]; 10 11 int head[MAXN]; 12 int pre[MAXN]; 13 int cur[MAXN]; 14 int level[MAXN]; 15 int gap[MAXN]; 16 int NE,NV,vs,vt,n,f,d; 17 int Food[MAXN]; 18 int Drink[MAXN]; 19 20 21 void Insert(int u,int v,int cap,int cc=0){ 22 edge[NE].v=v;edge[NE].cap=cap; 23 edge[NE].next=head[u];head[u]=NE++; 24 25 edge[NE].v=u;edge[NE].cap=cc; 26 edge[NE].next=head[v];head[v]=NE++; 27 } 28 29 30 31 int SAP(int vs,int vt){ 32 memset(pre,-1,sizeof(pre)); 33 memset(level,0,sizeof(level)); 34 memset(gap,0,sizeof(gap)); 35 for(int i=0;i
level[v]){ 61 cur[u]=i; 62 minlevel=level[v]; 63 } 64 } 65 gap[level[u]]--; 66 if(gap[level[u]]==0)break; 67 level[u]=minlevel+1; 68 gap[level[u]]++; 69 u=pre[u]; 70 } 71 return maxflow; 72 } 73 74 int main(){ 75 char str[MAXN]; 76 while(~scanf("%d%d%d",&n,&f,&d)){ 77 vs=0,vt=f+2*n+d+1,NV=vt+1,NE=0; 78 memset(head,-1,sizeof(head)); 79 for(int i=1;i<=f;i++){ 80 scanf("%d",&Food[i]); 81 Insert(vs,i,Food[i]);//源点与每一种食物连容量为food[i]的边。 82 } 83 for(int i=1;i<=d;i++){ 84 scanf("%d",&Drink[i]); 85 Insert(i+2*n+f,vt,Drink[i]);//每种饮料与汇点连容量为Drink[i]的边。 86 } 87 for(int i=1;i<=n;i++){ 88 Insert(i+f,i+f+n,1);//将人拆点,人与人之间连容量为1的边 89 } 90 for(int i=1;i<=n;i++){ 91 scanf("%s",str+1); 92 for(int j=1;j<=f;j++){ 93 if(str[j]=='Y'){ 94 Insert(j,i+f,1);//食物与人连边。 95 } 96 } 97 } 98 for(int i=1;i<=n;i++){ 99 scanf("%s",str+1);100 for(int j=1;j<=d;j++){101 if(str[j]=='Y'){102 Insert(i+f+n,f+2*n+j,1);//人与饮料之间连容量为1的边103 }104 }105 }106 printf("%d\n",SAP(vs,vt));107 }108 return 0;109 }

 

转载地址:http://peedx.baihongyu.com/

你可能感兴趣的文章
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
Linux基础命令---rmdir
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>
FreeMarker-Built-ins for strings
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
我理想中的前端工作流
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
Android状态栏实现沉浸式模式
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
表格排序
查看>>
java只能的round,ceil,floor方法的使用
查看>>
新开的博客,为自己祝贺一下
查看>>