洛谷P1402 酒店之王

2022-05-20 12:47:06 字數 950 閱讀 9338

題目大意:有三個集合 \(p,q,n\),p 與 n 集合之間存在一些有向邊,n 與 q 集合之間存在一些有向邊。在三個集合中每個點最多只能利用一次的前提下,求最多能利用多少n 集合中的點,使得 \((p,n,q)\) 三個節點之間均有邊相連。

題解:若只有兩個集合,顯然是二分圖的最大匹配問題。對於三個集合來說,最麻煩的問題在於 n 集合中每個點只能被選一次,但是乙個 n 集合中的節點卻可能對應著多個p、q 集合中的節點。保證 n 只能被選一次的方法是:將 n 集合中的點拆分成兩個點,分別表示入點和出點,且連接入點和出點之間的邊權為 1。

**如下

#include using namespace std;

const int maxn=410;

const int maxm=1e5+10;

int n,p,q,s,t,maxflow,d[maxn];

struct nodee[maxm<<1];

int tot=1,head[maxn];

inline void add_edge(int from,int to,int w),head[from]=tot;

e[++tot]=node,head[to]=tot;

}bool bfs()}}

return 0;

}int dinic(int u,int flow)

}return flow-rest;

}void read_and_parse()

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

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

for(int i=2*n+1;i<=2*n+p;i++)add_edge(s,i,1);

for(int i=2*n+p+1;i<=2*n+p+q;i++)add_edge(i,t,1);

}void solve()

int main()

洛谷 P1402 酒店之王

題目描述 xx酒店的老闆想成為酒店之王,本著這種希望,第一步要將酒店變得人性化。由於很多來住店的旅客有自己喜好的房間色調 陽光等,也有自己所愛的菜,但是該酒店只有p間房間,一天只有固定的q道不同的菜。有一天來了n個客人,每個客人說出了自己喜歡哪些房間,喜歡哪道菜。但是很不幸,可能做不到讓所有顧客滿意...

洛谷 P1402 酒店之王

題目描述 xx酒店的老闆想成為酒店之王,本著這種希望,第一步要將酒店變得人性化。由於很多來住店的旅客有自己喜好的房間色調 陽光等,也有自己所愛的菜,但是該酒店只有p間房間,一天只有固定的q道不同的菜。有一天來了n個客人,每個客人說出了自己喜歡哪些房間,喜歡哪道菜。但是很不幸,可能做不到讓所有顧客滿意...

洛谷P1402 酒店之王

洛谷連線 酒店之王 xx酒店的老闆想成為酒店之王,本著這種希望,第一步要將酒店變得人性化。由於很多來住店的旅客有自己喜好的房間色調 陽光等,也有自己所愛的菜,但是該酒店只有p間房間,一天只有固定的q道不同的菜。有一天來了n個客人,每個客人說出了自己喜歡哪些房間,喜歡哪道菜。但是很不幸,可能做不到讓所...