假期的宿舍 洛谷2055 網路流

2021-08-05 19:32:15 字數 1346 閱讀 8213

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

網路流模板題

將乙個人拆成兩個點,乙個是人,乙個床。

如果兩個人認識,且乙個人有床,就連一條容量為一的邊。

再將源點與需要床的人連邊,將床與匯點連邊。

最後跑網路流。

ps:好久沒打,錯了好多低階錯誤。。。

#include

#include

#include

#include

#include

using

namespace

std;

struct arredge[1000];

int ls[1000],cur[1000];

int f[1000];

int edge_m=1;

int n,m,s,t;

int ans,num=0;

void add(int x,int y,int w)

; cur[y]=ls[x]=edge_m; f[edge_m]=w;

edge[++edge_m]=(arr); cur[y]=ls[y]=edge_m; f[edge_m]=0;

}int dis[1000];

bool bfs()

}}while (!q.empty());

return

false;

}int find(int x,int min_)

}if (rec==min_) dis[x]=-1;

return min_-rec;

}int dinic()

}int a[1000],b[1000];

int ll;

int main()

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

ll=0;

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

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

dinic();

if (ans==num)

printf("^_^\n");

else

printf("t_t\n");

}return

0;}

洛谷2055 假期的宿舍(網路流)

良心的資料範圍,肯定就是o 因為題目中給出了許多關係,最後詢問是否能全部解決,那麼就相當於給了匹配關係,詢問最大匹配數與總數之間的關係,所以網路流的解法就出來了。對於每個非在校學生和要回家的學生,肯定就不需要考慮他們了,將他們與s連容量為1的邊限制最多1個人,對於每個住校學生,肯定需要床,那麼就將自...

洛谷 2055 假期的宿舍

好久不更新啦2333本著更新也沒人看的原則我來更新一下 題目描述 學校放假了 有些同學回家了,而有些同學則有以前的好朋友來探訪,那麼住宿就是乙個問題。比如 a 和 b 都是學校的學生,a 要回家,而 c 來看b,c 與 a 不認識。我們假設每個人只能睡和自己直接認識的人的床。那麼乙個解決方案就是 b...

匈牙利 洛谷 P2055 假期的宿舍

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