題意
乙個燒烤攤,最多同時考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範圍太大,所以不能採用時間點,而是用時間區間 設立乙個源點,連向每乙個...