P2055 假期的宿舍 網路流,最大流,最大匹配

2021-08-20 20:55:15 字數 939 閱讀 1833

有n個人,有的在學校有床有的沒有,有的在家有的沒有。現在如果有人回家了那麼他就會去看望他的朋友,回家的就會空出自己的床位。每個人可以睡和自己是直接朋友關係或自己的床,要求給本來有床的並且不在家的和來看望其的朋友分配床位。

將人和床建立二分圖,我們假設每個在家的人都有床,這樣不用看望朋友的就可以睡自己床,然後將除了沒有床且不再家的人都作為左邊點,然後將在學校的床作為右邊點進行最大匹配。

#include

#include

#include

using

namespace

std;

struct linea[10010];

int n,m,x,y,d[110],tot,state[110],school[110],num;

int head,tail,ls[110],s,e,ans,t,home[110],nn,qn;

bool ok[110],lxx[110][110];

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

bool bfs()}}

while (headreturn

false;

} int dinic(int x,int flow)

}if (!rest) d[x]=0;

return rest;

}int main()

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

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

}ans=0;

while (bfs())

ans+=dinic(s,2147483647);

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

else

printf("t_t\n");

}}

其實有些時候可以將本來不需要的在其他地方分配掉可能可以降低難度

匈牙利 洛谷 P2055 假期的宿舍

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

SSL ZYC 洛谷P2055 假期的宿舍

題目大意 思路 建圖 1.學生編號為 1 role presentation style position relative 11到 m role presentation style position relative m m,床編號為m 1 role presentation style pos...

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

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