網路流24題 深海機械人問題

2021-07-25 20:18:49 字數 1366 閱讀 3059

(網路流24題大多需要spj,所以需要乙個有spj的oj,本系列**均在www.oj.swust.edu.cn測試通過)

這道題其實和數字梯形的第三個規律挺像的(點和路徑均可重合),唯一的差別就是這道題的路徑權值只能計算一次,那怎麼辦呢,其實不難,我們只要將容量為inf的邊的權值修改為0,在此基礎上再加一條容量為1,權值為給定權值的邊即可。跑一邊最大費用最大流就可以啦。

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define inf 100000000

int dis[10000];

bool pd[10000];

int fro[10000];

int s=0,t=9999;

struct bian

a[1000000];

int fir[1000000];

int nex[1000000];

int tot=1;

void add_edge(int l,int r,int f,int v)

bool spfa()

}pd[u]=false;

}if(dis[t]==0x8f8f8f8f) return

false;

return

true;

}int cost;

void add_flow()

cost+=temp*dis[t];

mid=t;

while(mid!=s)

}int val[100][100];

int n,m;

inline

int wz(int x,int y)

int main()

for(int i=1;i<=m;i++)

for(int j=1;jint x;

scanf("%d",&x);

add_edge(wz(j,i),wz(j+1,i),1,x);

add_edge(wz(j+1,i),wz(j,i),0,-x);

add_edge(wz(j,i),wz(j+1,i),inf,0);

add_edge(wz(j+1,i),wz(j,i),0,0);

}for(int i=1;i<=st;i++)

for(int i=1;i<=fi;i++)

while(spfa()) add_flow();

cout

0;}

深海機械人問題 網路流24題

思路 和方格取數差不多的一道題 只是輸入有點噁心 然而他好像提示了怎麼輸出 之後就是建圖標準最大費用最大流了 不知道為什麼spfa的最大流t了乙個點 難道說資料這麼喪心病狂嗎 zkw的話倒是50ms就跑完了 code 1 include 2 define dbg x cout x x endl34 ...

網路流24題20 深海機械人問題

題面戳我 這裡推薦一下相關的題目 我可以說是雙倍經驗題嗎 luogu2045 方格取數加強版其實還是有點區別的啦 這個題是說邊上面有邊權所以就不需要拆點了嗷。每條邊可以採集一次,那麼肯定要連一條費用為收益容量為1的邊。那這條邊就不可以走了嗎?顯然不是。所有還要連一條費用為0容量為 inf 的邊。所以...

洛谷 網路流24題 深海機械人問題

初見安 這裡是傳送門 洛谷p4012 網路流24題 深海機械人問題 題意很簡單,多個點出發多個機械人,每條路徑上有價值,但是只能收集一次而路徑可以被多個機械人走,求最大可收集價值。網路流建圖很明顯就如題意建網格圖。但是對於每條邊我們要整兩條,一條容量為1,費用為價值,一條容量為inf,費用為0。換言...