P2055 ZJOI2009 假期的宿舍

2022-05-01 21:12:14 字數 1105 閱讀 6373

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

#include #include #include #include #include using namespace std;

const int maxn = 1000;

const int inf = 0x3f3f3f3f;

struct edge;

vectoredges;

vectorg[maxn];

int cur[maxn],s,t,n,dep[maxn],vis[maxn];

void addedge(int u,int v,int cap));

edges.push_back((edge));

int cnt=edges.size();

g[u].push_back(cnt-2);

g[v].push_back(cnt-1);

}int dfs(int x,int a)

}return flow;

}queueq;

bool bfs(void)}}

return vis[t];

}int dinic(void)

return flow;

}int cnt,is_stu[maxn],is_stay[maxn];

void init(void)

memset(is_stu,false,sizeof(is_stu));

memset(is_stay,false,sizeof(is_stay));

}int main()

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

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

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

}if(dinic()>=cnt)

else

}return 0;

}

P2055 ZJOI2009 假期的宿舍

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

P2055 ZJOI2009 假期的宿舍

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

P2055 ZJOI2009 假期的宿舍

這道題是求二分圖完美匹配。沒看請題意還不知道是求完美匹配,結果爆零。人一共分三種 在校學生 回家。這類人擁有乙個床,但是不睡。在校學生 不回家。這類人擁有乙個床,但也要睡乙個床。有時不一定睡自己的。外來學生。這類人沒床卻想睡覺。顯然要用 2n 的空間來建立人和床。等待匹配的人只有1 3兩種情況,等待...