洛谷 P2153 SDOI2009 晨跑

2021-08-15 10:34:14 字數 871 閱讀 8503

給出一幅有向無環圖,問從點1到點n有幾條互相沒有交點(除起點終點外不能有公共點)的路徑,保證路徑數量最多的情況下,路徑最大數量與最短的路徑長度之和是多少.

與費用流裸題不同的是,不能有公共點,解決方法是將每乙個點拆為乙個入點和乙個出點,流量為1(起點終點不用拆或者流量為inf),建邊時,從乙個點的出點連向另外一點的入點,再跑一遍費用流即可.

#include

#include

#include

#include

#define inf 0x3f3f3f3f

#define n 510

#define m 200100

using

namespace

std;

int n,m,first[n],d[n],bb=1,ans,last[n],b[n],lc;

struct bn

bn[m];

queue

que;

inline

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

inline

void bfs()}}

if(d[n]==inf) return;

lc+=d[n];

ans++;

for(p=n;p!=1;p=last[p])

bfs();

}int main()

for(i=2;i1,0),add(i+n,i,0,0);

add(1,n+1,inf,0),add(n+1,1,0,0),add(n,n*2,inf,0),add(n*2,n,0,0);

bfs();

cout

<" "

<}

洛谷P2153 SDOI2009 晨跑

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

(費用流)洛谷P2153 SDOI2009 晨跑

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

洛谷P1972 SDOI2009 HH的項鍊

這道題想了很久,發題解是為了理解的更深刻一點。管理放我過好嘛qwq 步入正題 這道題應該是很多做法,我選擇的是離線 樹狀陣列。首先輸入陣列。用fisrt陣列先記錄元素最開始出現的位置,對應的每乙個樹狀陣列的位置add一下 樹狀陣列洛谷也有模板題的了解一下就ok啦 rep i,1 n 然後倒著更新一遍...