设为首页 收藏本站
查看: 812|回复: 0

[经验分享] hdu 4294 第一发SAP

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-20 13:23:39 | 显示全部楼层 |阅读模式
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
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;
head=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<int>    q;
int u,v,i;
q.push(last);dep[last]=0;
while(!q.empty())
{
u=q.front();q.pop();
for(i=head;i!=-1;i=edge.next)
{
v=edge.v;
if(edge.cap!=edge.flow||dep[v]!=-1)    continue;
q.push(v);
dep[v]=dep+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=head;
u=0;
while(dep[0]<=last)
{
if(u==last)
{
int temp=INF;
int inser;
for(i=0;i<top;i++)
if(temp>edge[S].cap-edge[S].flow)
{
temp=edge[S].cap-edge[S].flow;
inser=i;
}
for(i=0;i<top;i++)
{
edge[S].flow+=temp;
edge[S^1].flow-=temp;
}
max_flow+=temp;
top=inser;
u=edge[S[top]].u;
}
if(u!=last&&gap[dep-1]==0)    break;
for(i=cur;i!=-1;i=edge.next)
if(edge.cap>edge.flow&&dep==dep[edge.v]+1)
break;
if(i!=-1)
{
cur=i;
S[top++]=i;
u=edge.v;
}
else
{
int mi=last+1;
for(i=head;i!=-1;i=edge.next)
{
if(edge.cap==edge.flow)    continue;
if(mi>dep[edge.v])
{
mi=dep[edge.v];
cur=i;
}
}
--gap[dep];
dep=mi+1;
++gap[dep];
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<F;j++)
if(s[j]=='Y')
addedge(j+1,id-1+F+D,1);
}
for(i=1;i<=n;i++)
{
scanf("%s",s);
int id=(i<<1);
for(j=0;j<D;j++)
if(s[j]=='Y')
addedge(id+F+D,j+1+F,1);
}
for(i=1;i<=n;i++)
{
int id=(i<<1);
addedge(id-1+F+D,id+F+D,1);
}
printf("%d\n",sap());
}
return 0;
}
  
  弱参考了几位巨巨的SAP代码,C++171MS,G++TLE.....
  貌似别人的DINIC G++ 600多MS过,C++也跑600多MS,不知道什么原因
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-116275-1-1.html 上篇帖子: The Problem Came Up when we upgrade from KingDee K3 to SAP R3(FI module) 下篇帖子: SAP web 开发 (第二篇 bsp 开发 mvc模式 Part2 )
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表