[二分+最大流] BZOJ1532: [POI2005]Kos-Dicing
来源:互联网 发布:c语言输出等腰三角形 编辑:程序博客网 时间:2024/05/22 14:11
数据范围略有毒…一开始还以为是什么贪心…
其实就直接二分,然后最大流暴力验证一下就好了。
#include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;const int maxn=30005,maxe=100005;struct Edge{ int from,to,cap,flow; Edge(int x1=0,int x2=0,int x3=0,int x4=0):from(x1),to(x2),cap(x3),flow(x4){}} Es[maxe];int N,n,m,d[maxn],nxt[maxe],S,T,fir[maxn],pos[maxn],tot=1;queue <int> que;bool BFS(){ memset(d,63,sizeof(d)); int INF=d[0]; while(!que.empty()) que.pop(); que.push(S); d[S]=0; while(!que.empty()){ int x=que.front(); que.pop(); for(int j=fir[x];j;j=nxt[j]) if(d[Es[j].to]==INF&&Es[j].cap>Es[j].flow){ d[Es[j].to]=d[x]+1; que.push(Es[j].to); } } return d[T]!=INF;}int find_DFS(int x,int flow){ if(x==T||flow==0) return flow; int res=0,f; for(int &j=pos[x];j;j=nxt[j]){ if(d[x]+1==d[Es[j].to]&&(f=find_DFS(Es[j].to,min(flow,Es[j].cap-Es[j].flow)))>0){ Es[j].flow+=f; Es[j^1].flow-=f; res+=f; flow-=f; if(flow==0) break; } } return res;}int GetMaxFlow(){ int MaxFlow=0,now; while(BFS()){ for(int i=1;i<=N;i++) pos[i]=fir[i]; MaxFlow+=find_DFS(S,1e+9); } return MaxFlow;}void add(int x,int y,int w){ Es[++tot]=Edge(x,y,w,0); nxt[tot]=fir[x]; fir[x]=tot; Es[++tot]=Edge(y,x,0,0); nxt[tot]=fir[y]; fir[y]=tot;}int ans,mid;bool check(){ for(int i=2;i<=tot;i++) Es[i].flow=0; for(int j=fir[T];j;j=nxt[j]) Es[j].cap=Es[j^1].cap=mid; return GetMaxFlow()==m;}int main(){ freopen("bzoj1532.in","r",stdin); freopen("bzoj1532.out","w",stdout); scanf("%d%d",&n,&m); N=n+m+2; S=n+m+1; T=n+m+2; for(int i=1;i<=m;i++){ int x,y; scanf("%d%d",&x,&y); add(S,i,1); add(i,m+x,1); add(i,m+y,1); } for(int i=1;i<=n;i++) add(m+i,T,1e+9); int L=1,R=m; while(L<=R){ mid=(L+R)>>1; if(check()) R=mid-1, ans=mid; else L=mid+1; } mid=1; check(); printf("%d\n",ans); return 0;}
阅读全文
0 0
- bzoj1532 [POI2005]Kos-Dicing 最大流+二分
- [二分+最大流] BZOJ1532: [POI2005]Kos-Dicing
- [BZOJ1532][POI2005]Kos-Dicing(二分+最大流)
- bzoj1532 [POI2005]Kos-Dicing(二分+最大流)
- bzoj1532 [POI2005]Kos-Dicing
- bzoj1532【POI2005】Kos-Dicing
- 【POI2005】【BZOJ1532】Kos-Dicing
- BZOJ1532: [POI2005]Kos-Dicing
- bzoj1532: [POI2005]Kos-Dicing
- 【bzoj1532】[POI2005]Kos-Dicing
- bzoj1532 [POI2005]Kos-Dicing
- 【BZOJ】【P1532】【POI2005】【Kos-Dicing】【二分+最大流】
- bzoj 1532: [POI2005]Kos-Dicing (二分+最大流)
- BZOJ1532/POI2005 Dicing
- BZOJ 1532: [POI2005]Kos-Dicing|网络流
- [POI2005]Kos-Dicing
- 1532: [POI2005]Kos-Dicing
- BZOJ 1532 POI 2005 Kos-Dicing 最大流+二分
- 前端开发知识结构
- 安卓开发中非常炫的效果集合
- C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
- scikit-learn(sklearn) 0.19 中文文档的翻译计划,邀请你的加入 | ApacheCN
- C语言实现单链表的创建和添加结点
- [二分+最大流] BZOJ1532: [POI2005]Kos-Dicing
- Spring的三种注入方式:
- VS中double的数据存储
- 词向量源码解析:(6.2)fasttext源码解析之文本分类1
- opencv 2.4.9+vs2013 人脸识别环境搭建,眼睛,鼻子,嘴巴等 摄像头读取和显示
- VC++/halcon入门之数据结构
- 数组,json的去重
- 利用 WireShark 深入调试网络请求
- top和ps取长补短