HDU 2883 kebab 最大流建模

2021-08-08 17:56:24 字數 1605 閱讀 5511

題意

乙個燒烤攤,最多同時考m個串,現在給n個顧客資訊,分別是到達燒烤店的時間,和他要走的時間,以及需要考的串的個數,和每個串烤熟需要的時間。問給定n個顧客,是否能夠滿足所有顧客的需求。

思路從超級源點連邊到每個顧客,容量為ni*ti,對於輸入的時間區間,將所有點排序去重,然後每個區間連邊到超級匯點容量為(l-r)*m。對於原來輸入的顧客的區間,如果他完全包含某個區間,那麼這個顧客到這個區間連一條邊,容量為inf。具體看**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define cle(a) memset(a,0,sizeof(a))

#define inf(a) memset(a,0x3f,sizeof(a))

#define ll long long

#define rep(i,a,n) for(int i=a;i<=n;i++)

using

namespace

std;

const

int inf = ( 2e9 ) + 2;

const

int maxn = 1010;

struct node

a[210];

vector

vec;

struct dinic

};int s,t,n;

int d[maxn];

int cur[maxn];

vector

e; vector

g[maxn];

void addedge(int u,int v,int c)

void init()}}

return d[t];

}int dfs(int u,int maxf,int t)

}return ret;

}int maxflow(int s,int t)

return flow;

}}dinic;

int contain(node a,int l,int r)

int main()

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

int t=3*n+10;

sort(vec.begin(),vec.end());

unique(vec.begin(),vec.end());

for(int i=1,l=vec.size();i1])*lim);

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

dinic.addedge(0,i,a[i].ti*a[i].ni);

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

}int maxflow=dinic.maxflow(0,t);

if(mf==maxflow)puts("yes");

else

puts("no");

}}/*

[1,2] 3

[2,4] 4

[4,6] 5

*/

HDU 2883 kebab 最大流,滿流

題意 有乙個人有個烤架,他的烤架同時可以烤m個串,有n個顧客會過來買,si,ni,ei,ti分別表示當前顧客來的開始時間,需要烤串的數量,最晚走的時間,每個烤串需要烤的時間。思路 此題同 hdu 3572,比3572多乙個離散化 s 時間 顧客 t 因為此題時間範圍太大,所以需要離散化,然後時間是乙...

HDU 2883 kebab 離散化 最大流

hdu 2883 kebab 離散化 最大流 題意 給定n個顧客,第i號顧客在si到達,點了ni個羊肉串,每個羊肉串需要ti個時間烤好。顧客想要在ei得到,乙個烤爐只烤m串。問你是否能滿足所有顧客的要求?能的話輸出 yes 否則輸出 no 注意 這ni個羊肉串可以被分開來考,乙個單獨的羊肉串也能分開...

HDU 2883 kebab(最大流判滿流)

題目大意 有n個人來買烤串,烤串機一次能烤m個烤串,給出每個人到來的時間si,離開的時間ei,每個人買ni個烤串,每個烤串所序的時間為ti,問能否滿足所有顧客的需求 思路分析 這道題和hdu的3572很像,只不過這道題的si和ei範圍太大,所以不能採用時間點,而是用時間區間 設立乙個源點,連向每乙個...