P2153 晨跑 費用流,網路流,拆點

2021-08-20 21:27:48 字數 775 閱讀 7780

這是評測記錄

乙個圖,沒錯要求不能走重複的邊和點。求走最多次的情況下路最短。

每次行走就是乙個流量在流,然後將邊權設為1就可以保證邊只能走一次。之後就是點只能走一次,將乙個點拆為入點和出點,連進來的連入點,連出去的連出點,然後之間連一條邊權為1的邊這樣那個點就只能走一次了。

#include

#include

#include

using namespace std;

struct linea[100081];

int tot,n,m,s,t,f[501],ls[501],tail,answer;

intstate[501],x,y,w,c,ans,head,pre[501];

bool v[501];

void addl(int

x,int

y,int w,int c)

bool spfa()}}

v[x]=false;

}if (f[t]==2147483647) return

0; else

return1;}

void upway()

}int main()

while (spfa())

upway();

printf("%d

%d",answer,ans);

}

(費用流)洛谷P2153 SDOI2009 晨跑

要求路程盡可能短,天數盡可能長,那麼肯定是最小費用最大流了。天數作為流量,路程作為費用。按照要求,每個路口只能走一次,這個就是不重複選取的問題,在最大流中的最長不下降子串行問題有涉及到,解決的辦法就是將點拆開,設入點為i ii,出點為i i i 然後在之間建一條流量為1 11的邊。這裡也是相同的,只...

晨跑 費用流

乙個有向圖,每條邊有流量和費用,求在每個點只經過一次的情況下 ss和t t除外 的最小費用最大流。原題也很容易看出是費用流。難點在於如何保證每個點只經過一次。那麼不妨將除s,t s,t之外的點進行拆點。每個點可以拆成入點和出點,流量為1,費用為0。這樣就可以保證每個點之間的邊只能走一次,就達成了每個...

BZOJ1877 晨跑(費用流)

elaxia最近迷戀上了空手道,他為自己設定了一套健身計畫,比如俯臥撐 仰臥起坐等 等,不過到目前為止,他 堅持下來的只有晨跑。現在給出一張學校附近的地圖,這張地圖中包含n個十字路口和m條街道,elaxia只能從 一 個十字路口跑向另外乙個十字路口,街道之間只在十字路口處相交。elaxia每天從寢室...