博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4294 第一发SAP
阅读量:6104 次
发布时间:2019-06-21

本文共 2609 字,大约阅读时间需要 8 分钟。

#include
#include
#include
#include
using namespace std;const int INF=0x7f7f7f7f;const int maxn=10008;struct fuck{ int u,v,flow,cap,next;}edge[maxn<<4];int head[maxn];int dep[maxn],gap[maxn];int tol;int last;void init(){ tol=0; memset(head,-1,sizeof(head));}int scan() { int res = 0, ch, flag = 0; if((ch = getchar()) == '-') //判断正负 flag = 1; else if(ch >= '0' && ch <= '9') //得到完整的数 res = ch - '0'; while((ch = getchar()) >= '0' && ch <= '9' ) res = res * 10 + ch - '0'; return flag ? -res : res; } void addedge(int u,int v,int w){ edge[tol].u=u; edge[tol].v=v; edge[tol].cap=w; edge[tol].flow=0; edge[tol].next=head[u]; head[u]=tol++; edge[tol].u=v; edge[tol].v=u; edge[tol].cap=0; edge[tol].flow=0; edge[tol].next=head[v]; head[v]=tol++;}void bfs(){ memset(dep,-1,sizeof(dep)); memset(gap,0,sizeof(gap)); gap[0]=1; queue
q; int u,v,i; q.push(last);dep[last]=0; while(!q.empty()) { u=q.front();q.pop(); for(i=head[u];i!=-1;i=edge[i].next) { v=edge[i].v; if(edge[i].cap!=edge[i].flow||dep[v]!=-1) continue; q.push(v); dep[v]=dep[u]+1; ++gap[dep[v]]; } }}int sap(){ int max_flow=0,i,u,v; bfs(); int cur[maxn]; int S[maxn]; int top=0; for(i=0;i<=last;i++) cur[i]=head[i]; u=0; while(dep[0]<=last) { if(u==last) { int temp=INF; int inser; for(i=0;i
edge[S[i]].cap-edge[S[i]].flow) { temp=edge[S[i]].cap-edge[S[i]].flow; inser=i; } for(i=0;i
edge[i].flow&&dep[u]==dep[edge[i].v]+1) break; if(i!=-1) { cur[u]=i; S[top++]=i; u=edge[i].v; } else { int mi=last+1; for(i=head[u];i!=-1;i=edge[i].next) { if(edge[i].cap==edge[i].flow) continue; if(mi>dep[edge[i].v]) { mi=dep[edge[i].v]; cur[u]=i; } } --gap[dep[u]]; dep[u]=mi+1; ++gap[dep[u]]; if(u!=0) u=edge[S[--top]].u; } } return max_flow;}int main(){ int i,j,n,F,D,u,v,w; char s[maxn]; while(scanf("%d%d%d",&n,&F,&D)==3) { init(); for(i=1;i<=F;i++) { scanf("%d",&w); //w=scan(); addedge(0,i,w); } last=F+D+(n<<1)+1; for(i=1;i<=D;i++) { scanf("%d",&w); //w=scan(); addedge(i+F,last,w); } for(i=1;i<=n;i++) { scanf("%s",s); int id=(i<<1); for(j=0;j

 

弱参考了几位巨巨的SAP代码,C++171MS,G++TLE.....

貌似别人的DINIC G++ 600多MS过,C++也跑600多MS,不知道什么原因

 

转载于:https://www.cnblogs.com/bitch1319453/p/4750150.html

你可能感兴趣的文章
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>
iOS知识小集·设置userAgent的那件小事
查看>>
移动端架构的几点思考
查看>>
Tomcat与Spring中的事件机制详解
查看>>
Spark综合使用及用户行为案例区域内热门商品统计分析实战-Spark商业应用实战...
查看>>
初学者自学前端须知
查看>>
Retrofit 源码剖析-深入
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
iOS13-适配夜间模式/深色外观(Dark Mode)
查看>>
网易跟贴这么火,背后的某个力量不可忽视
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>