[poj 3281]最大流+建图很巧妙
题目链接:http://poj.org/problem?id=3281
看了kuangbin大佬的思路,还用着kuangbin板子orz http://www.cnblogs.com/kuangbin/archive/2012/08/21/2649850.html
- #include<cstdio>
- #include<cstring>
- using namespace std;
- const int MAXN = ;
- const int MAXM = ;
- const int INF = 0x3f3f3f3f;
- struct Edge
- {
- int to,next,cap,flow;
- } edge[MAXM];
- int tol;
- int head[MAXN];
- int gap[MAXN],dep[MAXN],pre[MAXN],cur[MAXN];
- void init()
- {
- tol = ;
- memset(head,-,sizeof(head));
- }
- void addedge(int u,int v,int w,int rw=)
- {
- edge[tol].to = v;
- edge[tol].cap = w;
- edge[tol].next = head[u];
- edge[tol].flow = ;
- head[u] = tol++;
- edge[tol].to = u;
- edge[tol].cap = rw;
- edge[tol].next = head[v];
- edge[tol].flow = ;
- head[v]=tol++;
- }
- int sap(int start,int end,int N)
- {
- memset(gap,,sizeof(gap));
- memset(dep,,sizeof(dep));
- memcpy(cur,head,sizeof(head));
- int u = start;
- pre[u] = -;
- gap[] = N;
- int ans = ;
- while(dep[start] < N)
- {
- if(u == end)
- {
- int Min = INF;
- for(int i = pre[u]; i != -; i = pre[edge[i^].to])
- if(Min > edge[i].cap - edge[i].flow)
- Min = edge[i].cap - edge[i].flow;
- for(int i = pre[u]; i != -; i = pre[edge[i^].to])
- {
- edge[i].flow += Min;
- edge[i^].flow -= Min;
- }
- u = start;
- ans += Min;
- continue;
- }
- bool flag = false;
- int v;
- for(int i = cur[u]; i != -; i = edge[i].next)
- {
- v = edge[i].to;
- if(edge[i].cap - edge[i].flow && dep[v]+ == dep[u])
- {
- flag = true;
- cur[u] = pre[v] = i;
- break;
- }
- }
- if(flag)
- {
- u = v;
- continue;
- }
- int Min = N;
- for(int i = head[u]; i != -; i = edge[i].next)
- if(edge[i].cap - edge[i].flow && dep[edge[i].to] < Min)
- {
- Min = dep[edge[i].to];
- cur[u] = i;
- }
- gap[dep[u]]--;
- if(!gap[dep[u]])return ans;
- dep[u] = Min+;
- gap[dep[u]]++;
- if(u != start) u = edge[pre[u]^].to;
- }
- return ans;
- }
- int main()
- {
- int n,F,D;
- scanf("%d%d%d",&n,&F,&D);
- init();
- for (int i=;i<n;i++) addedge(i,i+n,);
- for (int i=;i<n;i++)
- {
- int f,d;
- scanf("%d%d",&f,&d);
- for (int j=;j<f;j++)
- {
- int x;
- scanf("%d",&x);
- x--;
- addedge(n+n+x,i,);
- }
- for (int j=;j<d;j++)
- {
- int x;
- scanf("%d",&x);
- x--;
- addedge(n+i,n+n+F+x,);
- }
- }
- for (int i=;i<F;i++) addedge(n+n+F+D,n+n+i,);
- for (int i=;i<D;i++) addedge(n+n+F+i,n+n+F+D+,);
- printf("%d",sap(n+n+F+D,n+n+F+D+,n+n+F+D+));
- return ;
- }
[poj 3281]最大流+建图很巧妙的更多相关文章
- poj 3281 最大流+建图
很巧妙的思想 转自:http://www.cnblogs.com/kuangbin/archive/2012/08/21/2649850.html 本题能够想到用最大流做,那真的是太绝了.建模的方法很 ...
- poj 3281 最大流建图
题目链接:http://poj.org/problem?id=3281 #include <cstdio> #include <cmath> #include <algo ...
- TTTTTTTTTTTT POJ 2112 奶牛与机器 多重二分匹配 跑最大流 建图很经典!!
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 15682 Accepted: 5597 ...
- Fixed Partition Memory Management UVALive - 2238 建图很巧妙 km算法左右顶点个数不等模板以及需要注意的问题 求最小权匹配
/** 题目: Fixed Partition Memory Management UVALive - 2238 链接:https://vjudge.net/problem/UVALive-2238 ...
- 图论--网络流--最大流--POJ 3281 Dining (超级源汇+限流建图+拆点建图)
Description Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, an ...
- poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙
/** 题目:poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙 链接:http://poj.org/problem?id=3680 题意:给定n个区间,每个区间(ai,bi ...
- hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙
/** 题目:hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4106 ...
- 图论--网络流--最小割 HDU 2485 Destroying the bus stations(最短路+限流建图)
Problem Description Gabiluso is one of the greatest spies in his country. Now he's trying to complet ...
- poj 3281 Dining 网络流-最大流-建图的题
题意很简单:JOHN是一个农场主养了一些奶牛,神奇的是这些个奶牛有不同的品味,只喜欢吃某些食物,喝某些饮料,傻傻的John做了很多食物和饮料,但她不知道可以最多喂饱多少牛,(喂饱当然是有吃有喝才会饱) ...
随机推荐
- Python的scrapy之爬取豆瓣影评和排名
基于scrapy框架的爬影评 爬虫主程序: import scrapy from ..items import DoubanmovieItem class MoviespiderSpider(scra ...
- 笨方法学python之import sys与from sys import argv的区别
这是在网上看到的一个大神的解答: sys is a module that contains “system functionality”. sys.argv is a list containing ...
- 【转】mybatis调用mssql有输入输出参数那种..
吐槽下,百度的搜索能力真心垃圾(有可能是我没想好关键词的缘故吧..)... 谷歌中国程序员呼唤你... 这面这边文章是别人的,感觉不错,转过来. http://lohasle.iteye.com/bl ...
- PHP.46-TP框架商城应用实例-后台21-权限管理-权限和角色的关系
权限和角色的关系 权限功能 角色功能 权限与角色的关联要通过权限-角色表进行{多对多} /********* 角色-权限表 *********/ drop if exists p39_role_pri ...
- .NET基础知识之八——深拷贝,浅拷贝
目录 1.概念 2.使用赋值符号"=" 3.浅复制 4.深复制 5.问题一:如果类里面嵌套有多个类,然后嵌套类里面又嵌套类,那么像上面实现深拷贝的方法还能用吗? 6.问题二:实现深 ...
- vue整合mui
步骤1:下载https://github.com/dcloudio/mui 步骤2:将下载来的包中的dist文件夹 放到vue项目的assets中 步骤3:修改webpack配置 找到build下 ...
- json 处理日期格式
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date createT ...
- bugku 字符正则
字符?正则? <?php highlight_file('2.php'); $key='KEY{********************************}'; $IM= preg_mat ...
- 关于redis一些问题记录
问题一:启动redis时出现警告,使用下列命令(已解决) 问题二:启动时,需要解决的警告(未解决) 问题三:使用自己的配置文件启动redis时,可能会遇到: Could not connect to ...
- python基础训练营03——字典、集合、判断、循环
一.字典dict: 相比列表list而言,列表list像一本书,如果要查书中的某一个内容,需要把书从前往后翻一遍,直到找到想要获取的东西:而字典dict,就像现实中的字典一样,通过查找特定的字或者词( ...