洛谷 P1402 酒店之王

2022-04-29 20:12:10 字數 1473 閱讀 1538

xx酒店的老闆想成為酒店之王,本著這種希望,第一步要將酒店變得人性化。由於很多來住店的旅客有自己喜好的房間色調、陽光等,也有自己所愛的菜,但是該酒店只有p間房間,一天只有固定的q道不同的菜。

有一天來了n個客人,每個客人說出了自己喜歡哪些房間,喜歡哪道菜。但是很不幸,可能做不到讓所有顧客滿意(滿意的條件是住進喜歡的房間,吃到喜歡的菜)。

這裡要怎麼分配,能使最多顧客滿意呢?

輸入輸出格式

輸入格式:

第一行給出三個正整數表示n,p,q(<=100)。

之後n行,每行p個數包含0或1,第i個數表示喜不喜歡第i個房間(1表示喜歡,0表示不喜歡)。

之後n行,每行q個數,表示喜不喜歡第i道菜。

--最大的顧客滿意數。

輸入樣例1:

2 2 2

1 01 0

1 11 1

輸出樣例1:

~~這個其實是比較模板的題目了~~

首先想到了網路流,那麼最重要的就是建圖了,怎麼建圖呢?

因為 人 是連線 菜品 和 房間 的節點,所以我們把 人 放在中間,看不懂? 意思就是說把代表 人 的節點放在中間,把 菜品 和 房間 放在兩邊,按照題意連在 人 上,注意要把所有代表房間的點連在乙個起點和所有菜品連在終點,然後跑網路流模板。

然後。。。。你就會發現你只有60分,哈哈哈。

為什麼呢?因為僅僅這麼處理的話可能有乙個**過兩個房間,這樣顯然是不行的,乙個人只能對應乙個房間。那麼我們就需要把乙個人拆成兩個節點,兩節點之間最大流量為1,這樣子乙個人就只可能流過乙個房間了。

#includeusing namespace std;

struct node

e[200005];

int head[200005],cnt=1,be,en;

inline void add(int u,int v,int w)

bool vis[1000005];

int dis[1000005],nowh[1000005];

int n,p,q,t,s;

bool bfs()} }

return vis[t];

}int dfs(int be,int a)

}return flow;

}int dinic()

return flow;

}int main()

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

}for(int i=1;i<=n;i++)//把人拆開

add(i+p,i+n+p,1);

for(int i=1;i<=p;i++)//把房間連在起點上

add(0,i,1);

for(int i=1;i<=q;i++)//把菜品接在終點上

add(i+n+p+n,n+n+p+q+1,1);

t=n+p+q+1+n;

s=0;

cout

}

洛谷 P1402 酒店之王

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

洛谷 P1402 酒店之王

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

洛谷P1402 酒店之王

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