題目:洛谷p2055、bzoj1433、codevs2347。
題目大意:有n個人,有些人是學生,有些人是來看學生的(不是學生)。學生有床,而非學生沒有(廢話!)。有些學生回家,有些學生晚上住校,來看學生的人要住在學校裡。
現在有一些認識的關係,規定每個要在學校睡覺的人只會睡在自己認識的人的床上,問能否使所有人都有床睡?
解題思路:人匹配床,很明顯是二分圖匹配。
先把住校的學生和自己的床連邊,然後把所有要睡在學校的人和他認識的人的床(如果有)連邊。
然後匈牙利亂搞即可。
c++ code:
#include#include#includeint n,dy[55];bool b[55][55],vis[55];
struct xingxia[55];
int dfs(int u)
} return 0;
}int main()
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
int match=0;
memset(dy,0,sizeof dy);
for(int i=1;i<=n;++i)
if(!a[i].hj)
if(match==bed)
puts("^_^");else
puts("t_t");
} return 0;
}
ZJOI2009 假期的宿舍
題目描述 學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b 睡 a 的床而 c 睡 b 的床。而實際情況可能非常複...
ZJOI2009 假期的宿舍
這道題分析下就會發現是乙個二分圖匹配。將在校 包括來校訪友 和床單構成圖,判斷最大匹配數是否為總在校人數即可。這裡用的是 km 演算法。1 include 2 3using namespace std 45 define re register 6 define rep i,a,b for re i...
ZJOI2009 假期的宿舍
學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b 睡 a 的床而 c 睡 b 的床。而實際情況可能非常複雜,有的人...