codevs 2494 Vani和Cl2捉迷藏

2022-02-13 12:52:53 字數 1262 閱讀 2192

時間限制: 1 s

空間限制: 32000 kb

題目等級 : 鑽石 diamo

vani和cl2在一片樹林裡捉迷藏……

這片樹林裡有n座房子,m條有向道路,組成了一張有向無環圖。

樹林裡的樹非常茂密,足以遮擋視線,但是沿著道路望去,卻是視野開闊。如果從房子a沿著路走下去能夠到達b,那麼在a和b裡的人是能夠相互望見的。

現在cl2要在這n座房子裡選擇k座作為藏身點,同時vani也專挑cl2作為藏身點的房子進去尋找,為了避免被vani看見,cl2要求這k個藏身點的任意兩個之間都沒有路徑相連。

為了讓vani更難找到自己,cl2想知道最多能選出多少個藏身點?

輸入描述 input description

第一行兩個整數n,m。

接下來m行每行兩個整數x、y,表示一條從x到y的有向道路。

輸出描述 output description

乙個整數k,表示最多能選取的藏身點個數。

樣例輸入 sample input

4 41 2

3 23 4

4 2樣例輸出 sample output

資料範圍及提示 data size & hint

對於20% 的資料,n≤10,m<=20。

對於60% 的資料, n≤100,m<=1000。

對於100% 的資料,n≤200,m<=30000,1<=x,y<=n。

【思路】

floyed+二分圖匹配最大獨立集

最大獨立集=n-最大匹配

【code】

#include#include

#include

using

namespace

std;

intcnt,n,m,ans,x,y;

int vis[210],map[210][210],match[210

];bool path(int

x) }

}return0;

}int

main()

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

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

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

map[i][j]=map[i][j]||(map[i][k]&&map[k][j]);

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

printf(

"%d\n

",ans-cnt);

return0;

}

codeVS 動態最大子段和

對於最大子段和,我們只需要維護四個變數 maxl,maxr,maxs,sum 分別表示區間最大字首子段和,區間最大字尾子段和,區間最大子段和,區間所有數的和 然後合併的時候是這樣的 t x sum t ls x sum t rs x sum t x maxs max max t ls x maxs,...

codevs1245 最小的N個和

題目描述 description 有兩個長度為 n 的序列 a 和 b,在 a 和 b 中各任取乙個數可以得到 n 2 個和,求這n 2 個和中最小的 n個。輸入描述 input description 第一行輸入乙個正整數n 第二行n個整數ai 且ai 10 9 第三行n個整數bi,且bi 10 ...

codevs 1245 最小的N個和

題目描述 description 有兩個長度為 n 的序列 a 和 b,在 a 和 b 中各任取乙個數可以得到 n 2 個和,求這n 2 個和中最小的 n個。輸入描述 input description 第一行輸入乙個正整數n 第二行n個整數ai 且ai 10 9 第三行n個整數bi,且bi 10 ...