HDU 2883 kebab 最大流,滿流

2021-07-04 16:38:14 字數 2570 閱讀 8595

題意:有乙個人有個烤架,他的烤架同時可以烤m個串,有n個顧客會過來買,si,ni,ei,ti分別表示當前顧客來的開始時間,需要烤串的數量,最晚走的時間,每個烤串需要烤的時間。

思路:此題同 hdu 3572,比3572多乙個離散化

s->時間->顧客->t

因為此題時間範圍太大,所以需要離散化,然後時間是乙個區間

比如說測試資料1的圖如下:

順便說一下模板的事,此模板是從q神處學習,q神部落格

此處說下我對這個模板

isap的實現過程和優化

首先是bfs

此模板的bfs是由第三部分和第一部分實現,具體實現讀者可以自行printf(「%d(%d) 「,dep[i],gap[i])(1<=i<=n)

其他和上述鏈結並無他樣

gap[i]是標記當前距離為i的點的數量

pre是此點的錢乙個點的標號,為了走到匯點,然後返回+-邊流量

dep[i]是點i的距離

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define rfor(i,a,b) for(i=a;i<=b;i++)

#define lfor(i,a,b) for(i=a;i>=b;i--)

#define sfor(i,a,h) for(i=h[a];i!=-1;i=e[i].next)

#define mem(a,b) memset(a,b,sizeof(a))

#define mec(a,b) memcpy(a,b,sizeof(b))

#define cheak(i) printf("%d ",i)

#define min(a,b) (a>b?b:a)

#define max(a,b) (a>b?a:b)

#define inf 0x7fffffff

typedef

long

long ll;

#define maxn 10005

struct node

s[maxn];

int a[maxn],tot1;

struct star

e[maxn*2];

int h[maxn],cur[maxn],gap[maxn],dep[maxn],pre[maxn];

int tot;

void add(int a,int b,int c)

void start()

int sap(int st,int ed,int n)

u=st;

ans+=min;

continue;

}//--------------------end

//--------------------第二部分

bool flag=0;

sfor(i,u,cur)

}if(flag)

//--------------------end

//--------------------第三部分

int min=n;

sfor(i,u,h)

if(e[i].c-e[i].f&&dep[e[i].to]if(!gap[dep[u]])

return ans;

dep[u]=min+1;

gap[dep[u]]++;

if(u!=st) u=e[pre[u]^1].to;

//--------------------end

} return ans;

}int main()

sort(a+1,a+tot1+1);

int k=1;

rfor(i,2,tot1)

if(a[i]!=a[i-1]) a[++k]=a[i];

tot1=k;

int st=k+n,ed=k+n+1;

rfor(i,1,k-1)

add(st,i+n,(a[i+1]-a[i])*m),add(i+n,st,0);

rfor(i,1,n)

rfor(j,1,tot1)

if(a[j]>=s[i].st&&a[j]0);

}else

if(a[j]>=s[i].ed) break;

rfor(i,1,n)

add(i,ed,s[i].num*s[i].t),add(ed,i,0);

if(ans==sap(st,ed,ed)) printf("yes\n");

else

printf("no\n");

}return

0;}

HDU 2883 kebab 最大流建模

題意 乙個燒烤攤,最多同時考m個串,現在給n個顧客資訊,分別是到達燒烤店的時間,和他要走的時間,以及需要考的串的個數,和每個串烤熟需要的時間。問給定n個顧客,是否能夠滿足所有顧客的需求。思路從超級源點連邊到每個顧客,容量為ni ti,對於輸入的時間區間,將所有點排序去重,然後每個區間連邊到超級匯點容...

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範圍太大,所以不能採用時間點,而是用時間區間 設立乙個源點,連向每乙個...