http://uoj.ac/problem/217

题意就不X了,思路在这:

居然一开始把sap里面的mn设置为inf了,我是傻逼。。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
int go[],first[],next[],flow[],op[],dis[],cnt[];
int tot,S,T,t,s,sz,son[],du[],n,nodes;
bool flag;
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
void insert(int x,int y,int z){
tot++;
go[tot]=y;
next[tot]=first[x];
first[x]=tot;
flow[tot]=z;
}
void add(int x,int y,int z){
insert(x,y,z);op[tot]=tot+;
insert(y,x,);op[tot]=tot-;
}
void add(int x,int y,int low,int high){
int F=high-low;
add(x,y,F);du[x]-=low;du[y]+=low;
}
int build(int l,int r,int op){
int k=++sz;
add(s,k,,inf);add(k+*n-,t,,inf);
add(*n-+l,k,,inf);if (op&&r<n) add(k+*n-,*n-+r+,,inf);
if (!op) add(*n-+l,k,,inf);
if (!op&&r<n) add(k+*n-,*n-+r+,,inf);
int x=read();
if (l==r){
son[k]=x;
return x;
}
int mid=read();
int p=build(l,mid,),q=build(mid+,r,);
if (p||q){
if (!x) flag=;
son[k]=;
return ;
}
return son[k]=x;
}
int dfs(int x,int f){
if (x==T) return f;
int mn=nodes,sum=;
for (int i=first[x];i;i=next[i]){
int pur=go[i];
if (dis[pur]+==dis[x]&&flow[i]){
int F=std::min(flow[i],f-sum);
int save=dfs(pur,F);
sum+=save;
flow[i]-=save;
flow[op[i]]+=save;
if (sum==f||dis[S]>=nodes) return sum;
}
if (flow[i]) mn=std::min(mn,dis[pur]);
}
if (sum==){
cnt[dis[x]]--;
if (cnt[dis[x]]==){
dis[S]=nodes;
}else{
dis[x]=mn+;
cnt[dis[x]]++;
}
}
return sum;
}
int mxflow(){
int res=,tim=;
while (dis[S]<nodes){
tim++;
res+=dfs(S,inf);
}
return res;
}
int main(){
n=read();
s=;t=*n-;
flag=;
build(,n,);
if (!flag) {puts("OwO");return ;}
for (int i=;i<=sz;i++)
if (son[i]==)
add(i,i+sz,,inf);
else
if (son[i]==)
add(i,i+sz,,inf);
S=t+,T=S+;nodes=T+;
for (int i=s;i<=t;i++)
if (du[i]>) add(S,i,du[i]);
else if (du[i]<) add(i,T,-du[i]);
int ans1=mxflow();
memset(dis,,sizeof dis);
memset(cnt,,sizeof cnt);
add(t,s,inf);
int ans=mxflow();
printf("%d\n",ans);
}

最新文章

  1. LINQ系列:LINQ to SQL Transact-SQL函数
  2. C#类继承和接口继承时一些模棱两可的问题[转]
  3. .NET软件开发与常用工具清单(转)
  4. WCF笔记
  5. js 表单操作
  6. 站在K2角度审视流程--任务的独占与释放
  7. SQL注入原理解说,非常不错!
  8. 理解和熟练运用js中的call及apply
  9. 省队集训Day3 light
  10. windows进程间通讯的方法
  11. 【linux shell系列--1】crontab命令
  12. MySQL取得某一范围随机数
  13. UVA-11882 bfs + dfs + 剪枝
  14. 文件系统及程序的限制关系: ulimit
  15. python3 str(字符串)
  16. 畅捷通T+12.2升级时发生的错误及处理方法图解
  17. linux发布环境初始化脚本
  18. 在图像中随机更改像素值程序——matlab
  19. VS2015在win10上编译的程序不能在Win7上运行的原因
  20. how to detect circles and rectangle?

热门文章

  1. Mybatis-Generator 详解 http://www.cnblogs.com/jtzfeng/p/5254798.html
  2. spring 定时器----quartz启动问题
  3. Discuz X2.5 用户名包含被系统屏蔽的字符[解决方法]
  4. 数据库框架 Litepal
  5. Swift: 类与结构体
  6. Effective C++ 总结(一)
  7. NYOJ 47过河问题
  8. Python之路,Day14 - It&#39;s time for Django
  9. Observer 观察者模式
  10. ASP.NET-FineUI开发实践-14