【二分 最大流】bzoj1532: [POI2005]Kos-Dicing
晚上果然不适合调题目
Description
Input
Output
题目分析
因为一场比赛只有两个人,且必定会分出输赢,那么将人与比赛之间连一条容量为1的边;比赛与汇点之间连一条容量为1的边。再二分源点连向每一个人的容量mid,代表每一个人的最大获胜场数。每一次的check就是检查最大流是否达到m。
不知道为什么这题当前弧优化这么明显……以后写dinic还是三个优化都加好了。
- #include<queue>
- #include<cctype>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- const int maxn = ;
- const int maxm = ;
- const int INF = 2e9;
- struct Edge
- {
- int u,v,f,c;
- Edge(int a=, int b=, int c=, int d=):u(a),v(b),f(c),c(d) {}
- }edges[maxm];
- int n,m,S,T,L,R,ans;
- int edgeTot,head[maxn],cur[maxn],nxt[maxm],lv[maxn];
- int read()
- {
- char ch = getchar();
- int num = , fl = ;
- for (; !isdigit(ch); ch=getchar())
- if (ch=='-') fl = -;
- for (; isdigit(ch); ch=getchar())
- num = (num<<)+(num<<)+ch-;
- return num*fl;
- }
- bool buildLevel()
- {
- memset(lv, , sizeof lv);
- std::queue<int> q;
- q.push(S), lv[S] = ;
- for (int i=; i<=n+m+; i++) cur[i] = head[i];
- for (int tmp; q.size(); )
- {
- tmp = q.front(), q.pop();
- for (int i=head[tmp]; i!=-; i=nxt[i])
- {
- int v = edges[i].v;
- if (!lv[v]&&edges[i].f < edges[i].c){
- lv[v] = lv[tmp]+, q.push(v);
- if (v==T) return true;
- }
- }
- }
- return false;
- }
- int fndPath(int x, int lim)
- {
- if (x==T) return lim;
- for (int &i=cur[x]; i!=-; i=nxt[i])
- {
- int v = edges[i].v, val;
- if (lv[x]+==lv[v]&&edges[i].f < edges[i].c){
- if ((val = fndPath(v, std::min(lim, edges[i].c-edges[i].f)))){
- edges[i].f += val, edges[i^].f -= val;
- return val;
- }else lv[v] = -;
- }
- }
- cur[x] = head[x];
- return ;
- }
- int dinic()
- {
- int ret = , val;
- while (buildLevel())
- while ((val = fndPath(S, INF))) ret += val;
- return ret;
- }
- void addedge(int u, int v, int c)
- {
- edges[edgeTot] = Edge(u, v, , c), nxt[edgeTot] = head[u], head[u] = edgeTot++;
- edges[edgeTot] = Edge(v, u, , ), nxt[edgeTot] = head[v], head[v] = edgeTot++;
- }
- int main()
- {
- memset(head, -, sizeof head);
- n = read(), m = read();
- S = , T = n+m+;
- for (int i=; i<=n; i++) addedge(S, i, m);
- for (int i=; i<=m; i++)
- {
- addedge(read(), n+i, );
- addedge(read(), n+i, );
- addedge(n+i, T, );
- }
- L = , R = m;
- for (int mid=(L+R)>>; L<=R; mid=(L+R)>>)
- {
- for (int i=; i<n*; i+=)
- edges[i].c = mid, edges[i].f = ,
- edges[i^].c = edges[i^].f = ;
- for (int i=n*; i<edgeTot; i++)
- edges[i].f = ;
- if (dinic() >= m) ans = mid, R = mid-;
- else L = mid+;
- }
- printf("%d\n",ans);
- return ;
- }
END
【二分 最大流】bzoj1532: [POI2005]Kos-Dicing的更多相关文章
- uvalive 3231 Fair Share 公平分配问题 二分+最大流 右边最多流量的结点流量尽量少。
/** 题目: uvalive 3231 Fair Share 公平分配问题 链接:https://vjudge.net/problem/UVALive-3231 题意:有m个任务,n个处理器,每个任 ...
- poj 2391 Ombrophobic Bovines 最短路 二分 最大流 拆点
题目链接 题意 有\(n\)个牛棚,每个牛棚初始有\(a_i\)头牛,最后能容纳\(b_i\)头牛.有\(m\)条道路,边权为走这段路所需花费的时间.问最少需要多少时间能让所有的牛都有牛棚可待? 思路 ...
- HDU3081 Marriage Match II —— 传递闭包 + 二分图最大匹配 or 传递闭包 + 二分 + 最大流
题目链接:https://vjudge.net/problem/HDU-3081 Marriage Match II Time Limit: 2000/1000 MS (Java/Others) ...
- HDU-3081-Marriage Match II 二分图匹配+并查集 OR 二分+最大流
二分+最大流: 1 //题目大意:有编号为1~n的女生和1~n的男生配对 2 // 3 //首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 4 // 5 //然后输入f组,c,d表示 ...
- hdu4560 不错的建图,二分最大流
题意: 我是歌手 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...
- POJ3228二分最大流
题意: 有n个点,每个点有两个权值,金子数量还有仓库容量,金子可以存在自己的仓库里或者是别的仓库里,仓库和仓库之间有距离,问所有金子都必须存到库里最大距离的最小是多少? 思路: ...
- BZOJ 1532 [POI2005]Kos-Dicing(二分+最大流判断)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1532 [题目大意] n个人,给出m场比赛,求出胜出的人最少赢的场次. [题解] 我们发 ...
- BZOJ1532: [POI2005]Kos-Dicing
1532: [POI2005]Kos-Dicing Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1060 Solved: 321[Submit][St ...
- BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流
1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...
随机推荐
- jquery jtemplates.js模板渲染引擎的详细用法第一篇
jquery jtemplates.js模板渲染引擎的详细用法第一篇 Author:ching Date:2016-06-29 jTemplates是一个基于JQuery的模板引擎插件,功能强大,有了 ...
- PostgreSQL - invalid input syntax for type timestamp with time zone
问题 在执行以下sql时报错: select COALESCE(null,null,now(),''); 报错如下: SQL Error [22007]: ERROR: invalid input s ...
- CSS样式之操作属性一
********css之操作属性******** 一.文本 1.文本颜色:color 颜色属性被用来设置文字的颜色 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 ...
- phpcms9.6 注入分析
phpcms9.6 注入分析 漏洞促发点\phpcms\modules\content\down.php $a_k = trim($_GET['a_k']); if(!isset($a_k)) sho ...
- Linux —— GDB调试程序
调试实现 在可执行文件中加入源代码的信息,比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证gdb能找到源文件. 生成可执行文件命令: g+ ...
- mybatis pageHelper 分页插件使用
转载大神 https://blog.csdn.net/qq_33624284/article/details/72828977 把插件jar包导入项目(具体上篇有介绍http://blog.csdn. ...
- Cube配置http通过SSRS连接
IIS的配置:http://www.cnblogs.com/ycdx2001/p/4254994.html 连接字符串: Data Source=http://IP74/olap/msmdpump.d ...
- DialogHelper
//require ScrollHelper.js function DialogHelper() { var _this = this; var doc = window.document; _th ...
- watir 的api在线文档
http://rubydoc.info/gems/watir-webdriver/frames http://rdoc.info/gems/watir-webdriver/frames http:// ...
- cpu 满载测试软件
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/d ...