時間限制: 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 ...