bzoj 2768: [JLOI2010]冠军调查
2016-03-22 06:40
399 查看
#include<cstdio> #include<iostream> #define M 100000 #include<cstring> using namespace std; int cnt=1,head[M],next[10*M],u[10*M],v[10*M],n,m,d[M],q[M],ans; void jia(int a1,int a2,int a3) { cnt++; u[cnt]=a2; v[cnt]=a3; next[cnt]=head[a1]; head[a1]=cnt; return; } bool bfs() { memset(d,0,sizeof(int)*(n+1)); int h=0,t=1; q[1]=0; d[0]=1; for(;h<t;) { h++; int p=q[h]; for(int i=head[p];i;i=next[i]) if(!d[u[i]]&&v[i]) { d[u[i]]=d[p]+1; if(d ) return 1; t++; q[t]=u[i]; } } return 0; } int dinic(int s,int f) { if(s==n) return f; int rest=f; for(int i=head[s];i&&rest;i=next[i]) if(v[i]&&d[u[i]]==d[s]+1) { int now=dinic(u[i],min(rest,v[i])); if(!now) d[u[i]]=0; v[i]-=now; v[i^1]+=now; rest-=now; } return f-rest; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { int a1; scanf("%d",&a1); if(a1) { jia(0,i,1); jia(i,0,0); } else { jia(i,n+1,1); jia(n+1,i,0); } } for(int i=1;i<=m;i++) { int a1,a2; scanf("%d%d",&a1,&a2); jia(a1,a2,1); jia(a2,a1,0); jia(a2,a1,1); jia(a1,a2,0); } n++; for(;bfs();) ans+=dinic(0,0x7fffffff); printf("%d\n",ans); return 0; }
最小割 同善意的投票。
相关文章推荐
- bzoj 2763: [JLOI2011]飞行路线
- bzoj 2761: [JLOI2011]不重复数字
- bzoj 2744: [HEOI2012]朋友圈
- bzoj 2743: [HEOI2012]采花
- bzoj 2730: [HNOI2012]矿场搭建
- Genymotion无法启动模拟器解决方案(续)报错:“unbale to start the virtual device”
- Redis 基础
- Create 2D game with Unity 3D - ( 1 )
- 概率
- bzoj 2705: [SDOI2012]Longge的问题
- bzoj 2661: [BeiJing wc2012]连连看
- bzoj 2654: tree
- oracle11g 云迁移报错 ORA-01180: can not create datafile 1
- STM32 IAP 在线升级
- 再次推荐一款逼真的HTML5下雪效果
- [R] ADMM for lasso
- 我与小娜(40):中国人工智能学会访问记
- WM_NCHITTEST有21种取值,常用的有HTCAPTION,HTCLIENT,HTBORDER,HTSYSMENU,HTTRANSPARENT,罗列所有VCL里对其使用的情况
- CABAC
- Win10 安装SDK解决方法