网络流HDU 2883
建图 源点 -> 每个人 -> 每段时间 -> 汇点
时间要离散化一下 分成一些时间段
权 inf ti[i]*(time[i]-time[i-1]) m*(time[i]-time[i-1])
n人 m个机器
开始时间 总共要的数目 底线时间 每个所需时间
如果可以达到输出Y 否则N
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<math.h> using namespace std;
#define inf 100000000
#define MAXN 300
#define MAXN1 200000
int si[MAXN+],ni[MAXN+],ei[MAXN+],ti[MAXN+];
int time[MAXN*+],S,T;
int head[*MAXN];
int cnt; struct edg
{
int w,next,to; }x[MAXN1+]; void add(int u,int v,int w)
{
x[cnt].next=head[u];
x[cnt].to=v;
x[cnt].w=w;
head[u]=cnt++;
}
int vis[*MAXN]; int bfs()
{
memset(vis,-,sizeof(vis));
vis[S]=;
queue<int>q1;
q1.push(S); while(!q1.empty())
{
int now=q1.front();
q1.pop();
for(int j=head[now];j!=-;j=x[j].next)
{
if(vis[x[j].to]<&&x[j].w)
{
vis[x[j].to]=vis[now]+;
q1.push(x[j].to);
}
}
}
return vis[T]!=-;
}
int dfs(int u,int w)
{
int ans=; if(u==T)
return w;
int i; for(i=head[u];i!=-;i=x[i].next)
{
if(vis[x[i].to]==vis[u]+&&x[i].w)
{
int b=dfs(x[i].to,min(w-ans,x[i].w));
x[i].w-=b;
x[i^].w+=b;
ans=ans+b;
}
}
return ans;
}
int main()
{
int n,m; while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j;
int c1,sum=;
cnt=; for(i=;i<=n;i++)
{
scanf("%d%d%d%d",&si[i],&ni[i],&ei[i],&ti[i]);
time[cnt++]=si[i];
time[cnt++]=ei[i];
sum=sum+ni[i]*ti[i];
}
sort(time,time+cnt);
c1=;
for(i=;i<cnt;i++)
{
if(time[i]!=time[i-])
time[c1++]=time[i];
}
S=;
T=n+c1+;
cnt=; memset(head,-,sizeof(head));
for(i=;i<=n;i++)
add(S,i,ni[i]*ti[i]),add(i,S,); for(i=;i<c1;i++)
{
if(i==) //0的时候没有i-1
{
add(n+i+,T,m*time[i]);
add(T,n+i+,);
}
else
{
add(n+i+,T,m*(time[i]-time[i-]));
add(T,n+i+,);
} for(j=;j<=n;j++)
{
int a; if(i==)
a=;
else
a=time[i-];
if(si[j]<=a&&time[i]<=ei[j])
{
add(j,n+i+,inf);
add(n+i+,j,);
}
}
}
int ans=;
while(bfs())
ans=ans+dfs(S,inf); if(ans>=sum)
printf("Yes\n");
else
printf("No\n");
} return ;
}
网络流HDU 2883的更多相关文章
- HDU 2883 kebab(最大流)
HDU 2883 kebab 题目链接 题意:有一个烧烤机,每次最多能烤 m 块肉.如今有 n 个人来买烤肉,每一个人到达时间为 si.离开时间为 ei,点的烤肉数量为 ci,每一个烤肉所需烘烤时间为 ...
- 网络流 HDU 3549 Flow Problem
网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...
- hdu 2883 kebab 网络流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2883 Almost everyone likes kebabs nowadays (Here a ke ...
- 图论--网络流--最大流 HDU 2883 kebab(离散化)
Problem Description Almost everyone likes kebabs nowadays (Here a kebab means pieces of meat grilled ...
- hdu 2883 kebab(时间区间压缩 && dinic)
kebab Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 2883 kebab
kebab Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 2883 ...
- 网络流 HDU 3605
建图 源点 -> 1024类人 -> 星球 -> 汇点 权 每类人数目 星球容量 星球容量 列举 0~1 ...
- kebab HDU - 2883(按时间段建点)
题意: 有n个人去撸串,每个人都能决定自己的串上有几块肉,每一块肉都要花费一个单位时间才熟,烤炉一次能烤m块肉 给出每个人的起始时间.终止时间.要几串.每个串上有几块肉,问能否满足所有的人 (啥?题不 ...
- hdu 2883(构图+最大流+压缩区间)
kebab Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
随机推荐
- NOIP2013pj小朋友的数字[DP 最大子段和]
描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值.作为这些 ...
- Java中的移位运算符
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- Concurrency::task(C++)
先看一个例子 #include <ppltasks.h> #include <iostream> using namespace Concurrency; using name ...
- linux下打开txt显示乱码的解决方法
Linux打开txt文件乱码的解决方法 Linux显示在Windows编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致.Linux下使用的编码是utf8,而Windows使用的是gb1 ...
- 开启flask调试
直接将app.debug = True时,程序出错并没有出现调试界面. 按照如下设置,flask+uwsgi情况下,python报错时会在浏览器中提示错误信息.方便调试. from werkzeug. ...
- C#几个经常用到的字符串截取
C#几个经常用到的字符串截取 一. 1.取字符串的前i个字符 (1)string str1=str.Substring(0,i); (2)string str1=str.Remove(i,str.Le ...
- Java核心技术点之集合框架
1. 概述 Java集合框架由Java类库的一系列接口.抽象类以及具体实现类组成.我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据.集合类型就是容纳这些对象的一个容 ...
- sqlserver 通用分页存储过程
来源:http://www.jb51.net/article/19936.htm CREATE PROCEDURE commonPagination ), --要显示的列名,用逗号隔开 ), --要查 ...
- Qt Creator 常用快捷键
多行注释模式 Ct ...
- Theano2.1.2-基础知识之第一步:代数
来自:http://deeplearning.net/software/theano/tutorial/adding.html Baby Steps - Algebra 一.两个标量相加 在学习the ...