hdu2883
题解:
网络流
用一个离散化
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=<<;
int si[],ei[],ni[],ti[],head[],h[],num[];
int a[],n,m,sum;
int cnt,ans,c;
struct edge
{
int x,y,flow,nxt,op;
}em[];
void add(int x,int y,int c)
{
em[++cnt].x=x;
em[cnt].y=y;
em[cnt].flow=c;
em[cnt].nxt=head[x];
head[x]=cnt;
em[cnt].op=cnt+;
cnt++;
em[cnt].x=y;
em[cnt].y=x;
em[cnt].flow=;
em[cnt].nxt=head[y];
head[y]=cnt;
em[cnt].op=cnt-;
}
int dfs(int x,int flow)
{
if(x==n+c)
return flow;
int temp=flow,pos=n+c+;
for (int j=head[x];j;j=em[j].nxt)
{
int y=em[j].y;
int w=em[j].flow;
if (h[x]==h[y]+&&w>)
{
int temp_flow=dfs(y,min(temp,w));
temp-=temp_flow;
em[j].flow-=temp_flow;
em[em[j].op].flow+=temp_flow;
if (!temp||h[]==n+c+)
return flow-temp;
}
if (w>&&h[y]<pos)pos=h[y];
}
if (temp==flow)
{
num[h[x]]--;
if (num[h[x]]==)h[]=n+c+;
else
{
h[x]=pos+;
num[h[x]]++;
}
}
return flow-temp;
}
void isap()
{
memset(h,,sizeof(h));
memset(num,,sizeof(num));
while (h[]<n+c+)ans+=dfs(,INF);
if (ans==sum)puts("Yes");
else puts("No");
}
int main()
{
while (~scanf("%d%d",&n,&m))
{
sum=;
int tot=;
cnt=;
memset(head,,sizeof(head));
for (int i=;i<=n;i++)
{
scanf("%d%d%d%d",si+i,ni+i,ei+i,ti+i);
a[++tot]=si[i];
a[++tot]=ei[i];
add(,i,ni[i]*ti[i]);
sum+=ni[i]*ti[i];
}
sort(a+,a+tot+);
c=;
for (int i=;i<=tot;i++)
if (a[c]!=a[i])a[++c]=a[i];
for (int i=;i<c;i++)
{
int num=(a[i+]-a[i])*m;
add(n+i,n+c,num);
}
for (int i=;i<=c-;i++)
for (int j=;j<=n;j++)
if (si[j]<=a[i]&a[i+]<=ei[j])add(j,i+n,INF);
ans=;
isap();
}
return ;
}
hdu2883的更多相关文章
- 【最大流】【HDU2883】【kebab】
题意: 有一个烧烤机,每次最多能烤 m 块肉,现在有 n 个人来买烤肉,每个人到达时间为 si,离开时间为 ei,点的烤肉数量为 ci,点的烤肉所需烘烤时间为 di, 每个人要烤的肉可以分成若干份在同 ...
- kebab HDU2883
题意:现在有n个人要烤肉,有m个烤肉架,然后给出每个人的烤肉开始时间si,结束时间ei,以及要烤肉的串数num,还有拷一串的时间ti,然后问你能不能满足所有人的要求. 为3572的进阶题 每个人为一个 ...
- hdu2883 最大流,判断满流 优化的SAP算法
这是09年的多校联赛题目,比10年的难度要大.如果没做过hdu3572,建议先去做.有了解题思维再来做这题. 这题与hdu3572类似.但是1 <= si < ei <= 1,000 ...
- HDU2883 kebab(最大流判断满流 + 离散化 + 区间化点)
[题意]: 有一个烤箱,烤箱在一个时刻最多考M个肉串,N个顾客,每个顾客有属性s,n,e,t s是来的时间,n是想要的肉串数量,e是最晚离开的时间,t是烤的时间(几分熟). 顾客的烤肉可以分开烤,比如 ...
- 最大流任务调度+离散化——hdu2883
思想就是把时间段离散化,然后用个点来表示一段时间 #include<iostream> #include<cstdio> #include<cstring> #in ...
- 【HDU2883】kebab——最大流
题目链接 把"时间粒子"作为最大流的计算结果 设置超级源点为 0 顾客点范围为 1 - 204 时间点 205 - 610 超级汇点 615 超级源点与所有顾客连线,容量为需求的烤 ...
随机推荐
- python分段算利润、税收
''' 题目:企业发放的奖金根据利润提成. 利润(I)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%: 2 ...
- 如何编写一个python项目
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397616003925a ...
- 模仿Masonary写一个计算器
1.CaculatorMaker @interface CaculatorMaker : NSObject @property(nonatomic,assign)int result; -(Cacul ...
- java-mybaits-00202-DAO-原始DAO开发方法
原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 原本的ibatis的 需要在dao实现类中注入一个SqlSessionFactory工厂. 1.思路 程序员需要写dao ...
- python之threading.local
简述: threading.local是全局变量但是它的值却在当前调用它的线程当中 作用: 在threading module中,有一个非常特别的类local.一旦在主线程实例化了一个local,它会 ...
- 非线性方程(组):一维非线性方程(二)插值迭代方法 [MATLAB]
一般而言,方程没有能够普遍求解的silver bullet,但是有几类方程的求解方法已经非常清晰确凿了,比如线性方程.二次方程或一次分式.一次方程可以直接通过四则运算反解出答案,二次方程的求根公式也给 ...
- requirements.txt
在文件夹下 生成requirements.txt文件 pip freeze > requirements.txt 安装requirements.txt依赖 pip install -r requ ...
- MySQL基础语句【学习笔记】
放在这里,以备后查. 1. 数据库, 数据库服务器, 数据库语言 数据库,是持久性数据的集合,供给定企业的应用程序系统使用,并且由一个数据库管理系统来管理: 数据库服务器,又称数据库管理系统,用来管理 ...
- spark环境安装
源码包下载: http://archive.apache.org/dist/spark/spark-2.1.1/v 集群环境: master 192.168.1.99 slave1 192.168.1 ...
- stm32 Flash读写[库函数]
stm32 的内置可编程Flash在许多场合具有十分重要的意义.如其支持ICP特性使得开发人员对stm32可以警醒调试开发,可以通过JTAG和SWD接口对stm32进行程序烧写:支持IAP特性使得开发 ...