HDU 4292 Food(dinic +拆点)
题目链接
我做的伤心了,不知是模版效率低,还是错了,交上就是TLE,找了份别人的代码,改了好几下终于过了。。
1 #include <cstdio> 2 #include <cstring> 3 #include <queue> 4 #include <map> 5 #include <iostream> 6 using namespace std; 7 #define INF 0x3fffffff 8 char food[201][201],drink[201][201]; 9 struct node 10 { 11 int u,v,next,re,w; 12 }edge[200001]; 13 int first[2001],dis[2001]; 14 int t,str,end; 15 void CL() 16 { 17 t = 1; 18 memset(first,-1,sizeof(first)); 19 } 20 void add(int u,int v,int w) 21 { 22 edge[t].u = u; 23 edge[t].v = v; 24 edge[t].w = w; 25 edge[t].re = t+1; 26 edge[t].next = first[u]; 27 first[u] = t++; 28 edge[t].u = v; 29 edge[t].v = u; 30 edge[t].w = 0; 31 edge[t].re = t-1; 32 edge[t].next = first[v]; 33 first[v] = t ++; 34 } 35 int bfs() 36 { 37 int u,v,i; 38 memset(dis,0xff,sizeof(dis)); 39 queue<int> que; 40 que.push(str); 41 dis[str] = 0; 42 while(!que.empty()) 43 { 44 u = que.front(); 45 que.pop(); 46 for(i = first[u];i != -1;i = edge[i].next) 47 { 48 v = edge[i].v; 49 if(edge[i].w > 0&&dis[v] < 0) 50 { 51 dis[v] = dis[u] + 1; 52 que.push(v); 53 } 54 } 55 } 56 if(dis[end] > 0) return 1; 57 else return 0; 58 } 59 int dfs(int u,int step) 60 { 61 int i,temp,v,tf = 0; 62 if(u == end) return step; 63 for(i = first[u];i != -1;i = edge[i].next) 64 { 65 v = edge[i].v; 66 if(edge[i].w > 0&&dis[v] == dis[u] + 1&&(temp = dfs(v,min(step,edge[i].w)))) 67 { 68 edge[i].w -= temp; 69 edge[edge[i].re].w += temp; 70 return temp; 71 } 72 } 73 if(!tf) dis[u] = -1;//注意这里 74 return tf; 75 } 76 int main() 77 { 78 int i,j,res,ans,n,f,d,temp; 79 while(scanf("%d%d%d",&n,&f,&d)!=EOF) 80 { 81 ans = 0; 82 str = 0; 83 end = 2000; 84 CL(); 85 for(i = 1; i <= f;i ++) 86 { 87 scanf("%d",&temp); 88 add(str,i,temp); 89 } 90 for(i = 1;i <= d;i ++) 91 { 92 scanf("%d",&temp); 93 add(f+i,end,temp); 94 } 95 for(i = 1;i <= n;i ++) 96 add(f+d+i,f+d+n+i,1); 97 for(i = 0;i < n;i ++) 98 { 99 scanf("%s",food[i]); 100 } 101 for(i = 0;i < n;i ++) 102 { 103 scanf("%s",drink[i]); 104 } 105 for(i = 0;i < n;i ++) 106 { 107 for(j = 0;j < f;j ++) 108 { 109 if(food[i][j] == 'Y') 110 add(j+1,f+d+i+1,1); 111 } 112 } 113 for(i = 0;i < n;i ++) 114 { 115 for(j = 0;j < d;j ++) 116 { 117 if(drink[i][j] == 'Y') 118 add(f+d+n+i+1,f+j+1,1); 119 } 120 } 121 while(bfs())//注意这部分 122 { 123 while(res = dfs(str,INF)) 124 ans+= res ; 125 } 126 printf("%d\n",ans); 127 } 128 return 0; 129 }
转载于:https://www.cnblogs.com/naix-x/archive/2013/05/08/3066148.html
HDU 4292 Food(dinic +拆点)相关推荐
- HDU 4292 Food (成都赛区网络赛第五题,拆点网络流)
题意:跟POJ3281基本上一样的拆点网络流. 建图:建一超级源点和一超级汇点,源点与食物相连,边权为其数量,汇点与饮料相连,边权也为其数量,把人分成两个点,之间的边权为1.每个人与之需要的食物和 ...
- hdu 4292 Food 最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4292 You, a part-time dining service worker in your c ...
- Food HDU - 4292 网络流
题意: 有n个人,f种食物和d种饮料,每种饮料和食物的个数已知,假设一个人拿到一个自己喜欢的食物或饮料,那个人就会感到满足. 最多能有几个人满足? 思路:拆点建图. 一个人必须又要饮料又要食物,假设我 ...
- HDU - 4292 Food(最大流+思维建边)
题目链接:点击查看 题目大意:作为食堂管理人,现在有n个学生需要打饭,每个学生需要一个饮料和食物才能满足,每个学生可以同时接受多种不同的食物和饮料,现在给出每种食物和饮料的个数,问最多能让多少学生满足 ...
- dinic (最大流) 算法 讲解
网络流入门-用于最大流的Dinic算法 转自:http://comzyh.tk/blog/archives/568/ "网络流博大精深"-sideman语 一个基本的网络流问题 感 ...
- CH - 6801 棋盘覆盖(二分图最大匹配+奇偶拆点)
题目链接:点击查看 题目大意:给出一个n*n的棋盘,我们需要尽可能多地放置1*2大小的方块,有一些位置是不允许摆放的,问最多能放多少方块 题目分析:看到1*2大小的方块,就直接联想到之前状压dp的那个 ...
- 解题报告:【kuangbin带你飞】专题十一 网络流
目录 A.POJ 3436 ACMComputerFactoryACM\ Computer\ FactoryACM Computer Factory[省选/NOI- ] B.POJ 3281 Dini ...
- 2012成都网络赛赛后【缺CHJ】
A Coder (HDU 4288,与Codeforces 85D相同) 应该用线段树写,我是块状链表水过了 #include<map>#include<cstdio>#inc ...
- kuangbin带你飞专题合集
题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...
最新文章
- Linux之tee命令
- unet_3plus
- golang中的base64
- [YTU]_2630 ( E2 驾驭const)
- bst latex 最大作者数_latex 参考文献作者是三个以上时如何处理?
- (转)如果知道dll文件是面向32位系统还是面向64位系统的?
- Exynos4412 中断驱动开发(二)—— 中断处理流程分析
- 腾讯自研分布式远程Shuffle服务Firestorm正式开源
- ASP.NET Core 系列视频完结,新项目实战课程发布。
- 【转】Cron表达式简介
- struts validator 基本知识 之 【出现错误信息的条数】。
- hive内部表与外部表入门
- python爬取学校题库_利用Python网络爬虫爬取学校官网十条标题
- html+css美化后台登录界面
- Redis-使用场景
- 算法基础课【合集2】
- 第八章 可扩展标记语言XML
- 土地调查图斑编号_第三次全国国土调查内业信息提取相关表、记录表、图斑、专项用地调查标注内容及代码...
- USB3.1HUB驱动芯片VL822
- Linux自学网站推荐
热门文章
- 使用 Python 从零开始开发区块链应用程序
- mac gource_如何使用Gource显示项目的时间表
- 软件开发向大数据开发过渡_如果您是过渡到数据科学的开发人员,那么这里是您的最佳资源...
- mysqlls_mysql基本命令
- 1012 The Best Rank
- Python控制结构总结
- 如何挑选靠谱的Java培训机构
- 计算机应用基础第三章操作步骤,最新江西三校生计算机应用基础模拟操作题集锦(超实用!)...
- 二、python小功能记录——监听鼠标事件
- 百度成立小度蓝牙联盟,DMA+小度App打造蓝牙语音风口