xx酒店的老闆想成為酒店之王,本著這種希望,第一步要將酒店變得人性化。由於很多來住店的旅客有自己喜好的房間色調、陽光等,也有自己所愛的菜,但是該酒店只有p間房間,一天只有固定的q道不同的菜。
有一天來了n個客人,每個客人說出了自己喜歡哪些房間,喜歡哪道菜。但是很不幸,可能做不到讓所有顧客滿意(滿意的條件是住進喜歡的房間,吃到喜歡的菜)。
這裡要怎麼分配,能使最多顧客滿意呢?
輸入輸出格式
輸入格式:
第一行給出三個正整數表示n,p,q(<=100)。
之後n行,每行p個數包含0或1,第i個數表示喜不喜歡第i個房間(1表示喜歡,0表示不喜歡)。
之後n行,每行q個數,表示喜不喜歡第i道菜。
輸出格式:
最大的顧客滿意數。
輸入輸出樣例
輸入樣例#1:
2 2 2
1 0
1 0
1 1
1 1輸出樣例#1:
1分析:
最大流裸題
分三類點:房間.人.菜
源點想每個房間連邊,如果第i人喜歡第j間房,第j間房向第i人連邊,
針對每個人拆點,自己連向自己,保證人只有乙個(限制流量),
如果第i人喜歡第j道菜,第i人向第j道菜連邊,每道菜向匯點連邊。
邊的容量均為1.
然而,一開始*****的我是這麼建圖的:
源點向每個人連邊,每個人向喜愛的房間連邊,把房間拆點,自己連向自己(限制流量)
第i人喜愛的所有房間都分別向第i人喜歡的菜連邊,每道菜向匯點連邊。
只有20分qaq,而且這麼處理在房間向菜品連邊時很麻煩,邊的數量很多。。。
這裡寫**片
#include
#include
#include
#include
using
namespace
std;
const
int inf=10000010;
const
int n=1100;
struct node;
node way[n*100];
int n,p,q,kaishi,jieshu;
int fj[n][n],st[n],tot=-1,deep[n];
void add(int u,int v,int z)
int bfs(int s,int t)}}
return deep[t]<0x7f;
}int dfs(int now,int t,int limit)
}return flow;
}int dinic() //模板
int main()
}for (int i=1;i<=n;i++)
}printf("%d",dinic());
return
0;}
Luogu P1402 酒店之王
luogu 型別 網路最大流 建模分析 首先,我們要拆人,卻不能拆房間和菜,因為給我們的關係是人與房間和人與菜的關係,我們只能用人當做中間橋梁聯絡房間與菜。那麼思路就很清晰明了了。源點向每個房間連一條容量為1的邊 喜歡的房間向人的入點連一條容量為1的邊 人的入點向出點連一條容量為1的邊 人的出點向喜...
luogu P1402 酒店之王
酒店之王 先大致講一下題意 題目給定p道菜,q個房間和n個客人。每個客人滿意的條件當且僅當那個客人分配到的房間和菜都是自己喜歡的。想都不想直接網路流,裸題。但是因為沒看清題意一開始瘋狂30分 模型 這樣子只要跑一邊網路流求出最大流就行了。感覺沒有紫題難度 include using namespac...
luoguP1402 酒店之王(網路流)
xx酒店的老闆想成為酒店之王,本著這種希望,第一步要將酒店變得人性化。由於很多來住店的旅客有自己喜好的房間色調 陽光等,也有自己所愛的菜,但是該酒店只有p間房間,一天只有固定的q道不同的菜。有一天來了n個客人,每個客人說出了自己喜歡哪些房間,喜歡哪道菜。但是很不幸,可能做不到讓所有顧客滿意 滿意的條...