深海機械人
題意:給定帶一次性邊權網格與若干機械人的起終點,規定起終點必須被機械人經過的次數,求所有機械人能夠得到的最大邊權和.
最大費用流,源點向起點連邊,終點向匯點連邊,方格上的點向相鄰點連流量為1費用為val的邊.除此之外,對於題目要求,」多個機械人可以在同一時間佔據同一位置「,方格上的點還要向相鄰點連流量為inf,費用為0的邊.
注意題面所給最後所給起點與終點的座標橫縱是相反的對於方格中的點的編號,可用mp陣列+p*q迴圈進行預處理.
#include
#include
using
namespace
std;
const
int sm = 260;
const
int sn = 3080;
const
int inf = 0x3f3f3f3f;
int p,q,tot=1,s,t;
int to[sn],hd[sm],nxt[sn],c[sn],f[sn];
int pre[sm],vis[sm],cst[sm],mp[17][17];
int min(int x,int y)
int point(int x,int y)
void spfa() }}
if(cst[t]==-inf) break;
df=inf;
for(int i=t;i!=s;i=to[pre[i]^1])
df=min(df,c[pre[i]]);
for(int i=t;i!=s;i=to[pre[i]^1])
c[pre[i]]-=df,c[pre[i]^1]+=df;
ans+=df*cst[t];
}printf("%d\n",ans);
}int main()
for(int i=0;i<=q;++i)
for(int j=0;jscanf("%d",&u);
add(mp[i][j],mp[i][j+1],1,u);
add(mp[i][j],mp[i][j+1],inf,0);
}for(int i=1;i<=a;++i)
scanf("%d%d%d",&k,&u,&v),add(s,mp[v][u],k,0);
for(int i=1;i<=b;++i)
scanf("%d%d%d",&k,&u,&v),add(mp[v][u],t,k,0);
spfa();
return
0;}
深海機械人問題 網路流24題 最大流最小費用
這道題的建邊倒是不難,但是要想到的是要去建乙個從一點到另一點乙個流量為inf但是費用為0的邊,而有價值的邊的時候,我們建立的邊就是流量為1,並且費用為負價值的邊。include include include include include include include include inclu...
網路流24題 深海機械人問題
網路流24題大多需要spj,所以需要乙個有spj的oj,本系列 均在www.oj.swust.edu.cn測試通過 這道題其實和數字梯形的第三個規律挺像的 點和路徑均可重合 唯一的差別就是這道題的路徑權值只能計算一次,那怎麼辦呢,其實不難,我們只要將容量為inf的邊的權值修改為0,在此基礎上再加一條...
深海機械人問題 網路流24題
思路 和方格取數差不多的一道題 只是輸入有點噁心 然而他好像提示了怎麼輸出 之後就是建圖標準最大費用最大流了 不知道為什麼spfa的最大流t了乙個點 難道說資料這麼喪心病狂嗎 zkw的話倒是50ms就跑完了 code 1 include 2 define dbg x cout x x endl34 ...