P2754 [CTSC1999] 家园
生活随笔
收集整理的這篇文章主要介紹了
P2754 [CTSC1999] 家园
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
來一篇 \(Pascal\)。
很顯然分層之后就可以搞最大流了。
如果蒟蒻沒有想錯的話是這樣子的 :
之前把 \(matrix[i,-1]\) 搞錯了改了 \(1 h\)。把 \(ISAP\) 換成 \(Dinic\) 又換成 \(ISAP\) 以及清空各種優化數組和各種細節用了 \(\frac{1}{2} h\)。判的是大于等于而不是大于且忘記 \(-1\) 改了 \(1h\)(我\(zz\)了)。最后判有沒有輸出才拿了 \(100\) 分。以及一開始寫用了 \(\frac{1}{2} h\)。
Uses math;varvalue,reach,next:array[-1..2100000] of longint;gap,dis,cnt:array[-1..810000] of longint;matrix:array[-1..210,-1..140] of longint;capacity:array[-1..210] of longint;n,m,i,j,l,r,nn,tmp,tot,now,node,time,need,sink,source,maxflow:longint;procedure add(l,r,sum:longint); begininc(tot); reach[tot]:=r; value[tot]:=sum; next[tot]:=cnt[l]; cnt[l]:=tot;inc(tot); reach[tot]:=l; value[tot]:=8-8; next[tot]:=cnt[r]; cnt[r]:=tot; end;function Dfs(now,flow:longint):longint; var i,k,mindis,ret:longint; beginmindis:=node-1; ret:=flow;if now=sink then exit(flow);i:=cnt[now];while i<>-1 dobeginif value[i]>0 thenbeginif dis[now]=dis[reach[i]]+1 thenbegink:=Dfs(reach[i],min(ret,value[i]));dec(value[i],k);inc(value[i xor 1],k);dec(ret,k);if dis[source]>=node then exit(flow-ret);if ret=0 then break;end;mindis:=min(mindis,dis[reach[i]]);end;i:=next[i];end;if ret=flow thenbegindec(gap[dis[now]]);if gap[dis[now]]=0 then dis[source]:=node;dis[now]:=mindis+1;inc(gap[dis[now]]);end;exit(flow-ret); end;beginfilldword(cnt,sizeof(cnt) div 4,maxlongint*2+1); tot:=-1;read(n,m,need); source:=0; sink:=9999; inc(n,2);for i:=1 to m dobeginread(capacity[i],matrix[i,-1]);for j:=0 to matrix[i,-1]-1 do begin read(matrix[i,j]); inc(matrix[i,j],2); end;end;while tmp<666 dobeginadd(time*n+1,sink,maxlongint);add(source,time*n+2,maxlongint);if time>0 thenbeginfor i:=1 to n do add((time-1)*n+i,time*n+i,maxlongint);for i:=1 to m dobeginl:=matrix[i,(time-1) mod matrix[i,-1]];r:=matrix[i,time mod matrix[i,-1]];add((time-1)*n+l,time*n+r,capacity[i]);end;end;fillchar(gap,sizeof(gap),0);fillchar(dis,sizeof(dis),0);node:=sink+1; gap[source]:=node; maxflow:=0;while dis[source]<node do inc(maxflow,Dfs(source,maxlongint));inc(tmp,maxflow); inc(time);if tmp>=need then break;end;if time>=666 then writeln(0) elsewriteln(time-1); end.轉載于:https://www.cnblogs.com/FibonacciHeap/articles/10322010.html
總結
以上是生活随笔為你收集整理的P2754 [CTSC1999] 家园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wow宏命令集中帖
- 下一篇: Windows XP自动关机的实现