洛谷 P3356 火星探險問題

2021-08-16 01:46:44 字數 1029 閱讀 2750

給出一張地圖,上面有一些石塊或障礙,現在有一些運載車從左上角出發,要去右下角,只能向右或向下走,每個石塊只能收集一次,輸出收集到最多石塊的路徑.

多個運載車,不難想到是網路流,但難點在於每個石塊最多收集一次,而且要收集最多石塊.

可以用費用流來做,每個點拆成兩個入點向出點連一條流量為inf,費用為0的邊,如果該地有石塊,則再連一條流量為1,費用為-1的邊,最後跑費用流,再用dfs輸出路徑即可.

#include

#include

#include

#include

#define n 20010

#define inf 0x3f3f3f3f

#define zh(i,j) ((i-1)*n+j)

using

namespace

std;

int n,m,k,ans,bb=1,first[n],s,t,last[n],b[n],d[n],mf,mm[40][40];

bool in[n];

struct bn

bn[1001000];

queue

que;

inline

void add(int u,int v,int w,int z)

inline

void ad(int u,int v,int w,int z)

inline

bool bfs()}}

}if(d[t]==inf) return

0; for(p=t; p!=s; p=last[p])

ans+=mn*d[t];

mf+=mn;

for(p=t; p!=s; p=last[p])

return1;}

void df(int now,int u)

}}int main()

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

}for(; bfs(););

// coutfor(i=1;i<=p;i++)

}

洛谷P3356 火星探險問題 費用流

火星探險隊的登陸艙將在火星表面著陸,登陸艙內有多部障礙物探測車。登陸艙著陸後,探測車將離開登陸艙向先期到達的傳送器方向移動。探測車在移動中還必須採集岩石標本。每一塊岩石標本由最先遇到它的探測車完成採集。每塊岩石標本只能被採集一次。岩石標本被採集後,其他探測車可以從原來岩石標本所在處通過。探測車不能通...

網路流24題 23 洛谷P3356 火星探險問題

題意 q p q pq p的網格,有障礙 平坦地面 岩石標本,求從左上角到右下角最多運送車輛的情況下,運送的石子數最多,輸出車輛走的路徑。思路 35 35的圖很小,拆點建圖,有石子的一條邊容量為1,費用 1,另一條容量inf,費用0.最後的輸出答案跑n遍dfs,每次沿著flow 0的邊走到終點,並把...

洛谷 P1416 攻擊火星

題目描述 一群外星人將要攻擊火星。火星的地圖是乙個n個點的無向圖。這夥外星人將按照如下方法入侵,先攻擊度為0的點 相當於從圖中刪除掉它 然後是度為1的點,依此類推直到度為n 1的點。所有的點度統計是動態統計的。乙個點刪掉後,與之相連的點的點度都會 1 外星人攻擊度為某個數的點時是同時攻擊的。你需要設...