【分块答案】【最小割】bzoj1532 [POI2005]Kos-Dicing
引用zky的题解:http://blog.csdn.net/iamzky/article/details/39667859
每条S-T路径代表一次比赛的结果。最小割会尽量让一个人赢得最多。
因为二分总是写挂,所以写了分块答案,比暴力枚举好像快不了多少。
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- #include<cmath>
- using namespace std;
- #define INF 2147483647
- #define MAXN 20011
- #define MAXM 100301
- int v[MAXM],cap[MAXM],en,first[MAXN],next[MAXM];
- int d[MAXN],cur[MAXN];
- queue<int>q;
- int n,m,S,T;
- void Init_Dinic(){memset(first,-1,sizeof(first)); en=0; S=0; T=n+m+1;}
- void AddEdge(const int &U,const int &V,const int &W)
- {v[en]=V; cap[en]=W; next[en]=first[U]; first[U]=en++;
- v[en]=U; next[en]=first[V]; first[V]=en++;}
- bool bfs()
- {
- memset(d,-1,sizeof(d)); q.push(S); d[S]=0;
- while(!q.empty())
- {
- int U=q.front(); q.pop();
- for(int i=first[U];i!=-1;i=next[i])
- if(d[v[i]]==-1 && cap[i])
- {
- d[v[i]]=d[U]+1;
- q.push(v[i]);
- }
- }
- return d[T]!=-1;
- }
- int dfs(int U,int a)
- {
- if(U==T || !a) return a;
- int Flow=0,f;
- for(int &i=cur[U];i!=-1;i=next[i])
- if(d[U]+1==d[v[i]] && (f=dfs(v[i],min(a,cap[i]))))
- {
- cap[i]-=f; cap[i^1]+=f;
- Flow+=f; a-=f; if(!a) break;
- }
- if(!Flow) d[U]=-1;
- return Flow;
- }
- int max_flow()
- {
- int tmp=0,Flow=0;
- while(bfs())
- {
- memcpy(cur,first,(n+m+5)*sizeof(int));
- while(tmp=dfs(S,INF)) Flow+=tmp;
- }
- return Flow;
- }
- int us[10001],vs[10001];
- void Rebuild(const int &x)
- {
- Init_Dinic();
- for(int i=1;i<=m;++i)
- {
- AddEdge(S,i,1);
- AddEdge(i,us[i]+m,1);
- AddEdge(i,vs[i]+m,1);
- }
- for(int i=1;i<=n;++i) AddEdge(i+m,T,x);
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for(int i=1;i<=m;++i) scanf("%d%d",&us[i],&vs[i]);
- int sz=sqrt(m); int last=0;
- for(int i=1;last<=m;i+=sz)
- {
- Rebuild(i);
- if(max_flow()>=m)
- {
- for(int j=last+1;j<=i;++j)
- {
- Rebuild(j);
- if(max_flow()>=m)
- {
- printf("%d\n",j);
- return 0;
- }
- }
- }
- last=i;
- }
- return 0;
- }
【分块答案】【最小割】bzoj1532 [POI2005]Kos-Dicing的更多相关文章
- UVA1389 Hard Life[二分答案+最小割]
我真菜啊←地址 求最大密度子图方案.密度=边数/点数 假设E,V为最大密度子图的边数点数.则$\forall \rho$有$\rho \leqslant \frac{E}{V}$即$E- \rho V ...
- 二分图&网络流&最小割等问题的总结
二分图基础: 最大匹配:匈牙利算法 最小点覆盖=最大匹配 最小边覆盖=总节点数-最大匹配 最大独立集=点数-最大匹配 网络流: 技巧: 1.拆点为边,即一个点有限制,可将其转化为边 BZOJ1066, ...
- BZOJ3438 小M的作物(最小割)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=3438 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为 ...
- 最大流-最小割 MAXFLOW-MINCUT ISAP
简单的叙述就不必了. 对于一个图,我们要找最大流,对于基于增广路径的算法,首先必须要建立反向边. 反向边的正确性: 我努力查找了许多资料,都没有找到理论上关于反向边正确性的证明. 但事实上,我们不难理 ...
- 【BZOJ1497】[NOI2006]最大获利 最小割
裸的最小割,很经典的模型. 建图:要求总收益-总成本最大,那么将每条弧与源点相连,流量为成本,每个收益与汇点相连,流量为收益,然后每条弧与它所能到达的收益相连,流量为inf. 与源点相连的是未被选中的 ...
- BZOJ1497: [NOI2006]最大获利[最小割 最大闭合子图]
1497: [NOI2006]最大获利 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 4375 Solved: 2142[Submit][Status] ...
- 图的全局最小割的Stoer-Wagner算法及例题
Stoer-Wagner算法基本思想:如果能求出图中某两个顶点之间的最小割,更新答案后合并这两个顶点继续求最小割,到最后就得到答案. 算法步骤: --------------------------- ...
- 【HDU 5855】Less Time, More profit(网络流、最小割、最大权闭合子图)
Less Time, More profit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- 【GCJ2008E】日程表 最小割
Google Code Jam 2008 E 日程表 [题目描述] 热情的选手Sphinny正在看新一年的日程表,并发现已经安排了很多编 程竞赛.她将这一年的每一天都用以下三种方式之一在日程表上打标记 ...
随机推荐
- Consumer [分组背包]
Consumer Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/65536 K (Java/Others) Total Subm ...
- fastjson解析服务端返回的数据
1.配置依赖 //fastjson api 'com.alibaba:fastjson:1.2.44' 2.设计服务端返回的数据 {},{},{}]} 3.编写bean类,特别注意,要和服务端返回的类 ...
- LA2995 Image is everything
蓝书P12 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm ...
- SVN 服务器安装及配置(WIN7)
软件安装包 客户端: 服务端: 安装服务端 不整合 Apache 服务器可以忽略此选项. 安装程序会自动在path下配置好环境变量:D:\Subversion\bin; 查看是否安装成功: C:\Us ...
- Spring学习-- SpEL表达式
Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于 EL:SpEL 使用 #{...} 作为定界符 , 所有在大括号中的字符都将被认为是 SpE ...
- 有关javamelody的配置
一:前沿 在这里我学到了怎么来使用开源的东西,也第一次去接触有关性能方面检测的开源框架,javamelody是性能检测的,刚刚看的时候我什么都不知道的,但是自己接触了,才知道一点大概思路吧.下面来记载 ...
- CCCC练习即感
字符串进行初始化时不能通过char a[10]={'\0'}来简单进行,写循环或者memset,亲测有效,以及初始化分好情况,用空格还是'\0',别乱搞. 有一个有意思的题,连续因子,从2开始,依次向 ...
- Codeforces Round #299 Div2 解题报告
这场比赛并没有打现场,昨天晚上做了ABCD四道题,今天做掉了E题 以前还没有过切完一场比赛的所有题呢~爽~ A. Tavas and Nafas Today Tavas got his test ...
- ShadowBroker公开的SMB远程命令执行漏洞修复
有人不知道如何获得MS对应的补丁KB编号,可以看这篇文章了~ 漏洞编号为ms17-010,如何查看对应MS号的补丁已经安装: 下载微软官方的补丁信息列表(Microsoft Security Bull ...
- shell脚本之while for if 语句和编写计划任务
关于while循环: while do done 例如 1.关于内存的实时操作: (1).vim a.sh (2).输入以下while循环 (3)../a.sh执行脚本 2.自加一的操作: (1).v ...