洛谷 P2055 ZJOI2009 假期的宿舍

2022-03-03 07:07:22 字數 1059 閱讀 7956

學校放假了 · · · · · · 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b 睡 a 的床而 c 睡 b 的床。而實際情況可能非常複雜,有的人可能認識好多在校學生,在校學生之間也不一定都互相認識。我們已知一共有 n 個人,並且知道其中每個人是不是本校學生,也知道每個本校學生是否回家。問是否存在乙個方案使得所有不回家的本校學生和來看他們的其他人都有地方住。

顯然的二分圖匹配,這個圖要分成兩部分,一部分是人,另一部分是床

建圖:1.如果這個人在校且不回家,那麼就連$i$到$i$一條邊,表示這個人於這個床匹配

2.如果這個人不在校且其朋友在校,就表明這個人可以睡在他朋友的床上,連線$i$到$j$

注意初始化

#include#include

#include

#include

#define n 260

using

namespace

std;

inthead[n],tot;

struct

nodee[n];

void add(int u,int

v)int

n,dfn[n],match[n],ans,sum;

intin

[n],gh[n];

void

init()

bool dfs(int u,int

t) }

}return

false;}

intt;

intmain()

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

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

if((in[i]&&!gh[i])||!in

[i])

if(ans==sum) printf("

^_^\n");

else printf("

t_t\n");

}return0;

}

P2055 ZJOI2009 假期的宿舍

題目描述 學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b 睡 a 的床而 c 睡 b 的床。而實際情況可能非常複...

P2055 ZJOI2009 假期的宿舍

看到複雜的匹配條件,發現要讓乙個人和乙個床匹配,所以就每個有床的人 指本校學生 和t連一條邊,每個需要床的人 指外校的人和不回家的人 和s連一條邊,i和j互相認識就把i和j的床連在一起,自己和自己的床肯定連一條邊,然後流量每多1,就表示滿足了乙個人對床的需求,跑最大流就相當於最多能滿足多少人的需求,...

P2055 ZJOI2009 假期的宿舍

學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b 睡 a 的床而 c 睡 b 的床。而實際情況可能非常複雜,有的人...