給出一張地圖,上面有一些石塊或障礙,現在有一些運載車從左上角出發,要去右下角,只能向右或向下走,每個石塊只能收集一次,輸出收集到最多石塊的路徑.
多個運載車,不難想到是網路流,但難點在於每個石塊最多收集一次,而且要收集最多石塊.
可以用費用流來做,每個點拆成兩個入點向出點連一條流量為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 外星人攻擊度為某個數的點時是同時攻擊的。你需要設...