LA 3353 最優巴士線路設計

2022-04-01 06:39:32 字數 1139 閱讀 8875

給出乙個 n 個點的有向圖,找若干個圈,是的每個結點恰好屬於乙個圈。要求總長度盡量小。

三倍經驗題 uva 12264,hdu 1853 

這題有兩種解法,一是匹配:

每個點只在乙個圈中,則他有唯一的前驅和後繼,也就是入度為1,出度為1,拆成 入度點和出度點,跑最小全匹配,因為是匹配,這樣就保證了他在唯一的乙個圈中,但是劉汝佳的板子有個問題,就是他會產生被迫的匹配,瞎起的名字,注意有這樣的原本不存在的邊,就說明無解。再次熟悉一下頂標。太久沒寫了~~~~

而是費用流:mcmf

就是中間cap = c,有無解就是看流量是否為 n ,是的,就是最小費用。

#include using

namespace

std;

const

int maxn = 100

;const

int inf = 1

<<30

;int

w[maxn][maxn],n;

int lx[maxn],ly[maxn]; ///

頂標int lefts[maxn]; ///

left[i] 為右邊第 i 個點的標號

bool s[maxn],t[maxn]; ///

s,t左右第 i 個點是否標記

bool match(int

i) }

return

false;}

void

update()

}void

km()

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

}}int

main()

}km();

bool flag = true

;

int ans = 0

;

for(int j = 1; j <= n; j++)

ans+= -w[i][j];

}if(flag==false) puts("n"

);

else printf("

%d\n

",ans);

}return0;

}