P2055 ZJOI2009 假期的宿舍

2022-08-13 01:42:12 字數 1163 閱讀 6571

這道題是求二分圖完美匹配。沒看請題意還不知道是求完美匹配,結果爆零。

人一共分三種:

在校學生 && 回家。這類人擁有乙個床,但是不睡。

在校學生 && 不回家。這類人擁有乙個床,但也要睡乙個床。有時不一定睡自己的。

外來學生。這類人沒床卻想睡覺。

顯然要用\(2n\)的空間來建立人和床。

等待匹配的人只有1、3兩種情況,等待匹配的床只有1、2兩種情況。

第1種情況連床沒什麼卵用。又不睡。

只有第2種情況的人可以連自己的床。

第3種情況的人一定要睡別人的床。

在2、3種情況中,只要認識的人有床,就可以連線

然後套個二分圖匹配的樣子,跑跑網路流就ok了。

最後判斷答案是不是等於人數,輸出那兩個表情即可。

**:

#include#include#include#includeconst int maxn = 1005, inf = 19260817;

struct edges

e[1000005];

int head[maxn], tot;// remember to set tot = 1

int n, s, t;

bool in_school[maxn], go_home[maxn];

int dep[maxn], cur[maxn];

void link(int u, int v, int w)

; head[u] = tot;

}void addedges(int u, int v, int w)

int read()

return ans;

}bool bfs()}}

return dep[t];

}int dfs(int u, int flow)}}

return 0;

}int dinic()

return ans;

}int main()

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

}int ans = dinic();

if(ans == cnt) printf("^_^\n");

else printf("t_t\n");

}return 0;

}

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 的床。而實際情況可能非常複雜,有的人...