hdu 2883 kebab
来源:互联网 发布:怎么开淘宝店铺步骤 编辑:程序博客网 时间:2024/05/17 07:56
It's a network max_flow problem. Make edges from start_point to Task_i. the capacity of this edge is ni * ti ,from Task_i to every time_points,the capacity of this edge is INF,from every time_points to end_point,the capacity of the edge is m.
And then run SAP,You must get answer.
The portal:http://acm.hdu.edu.cn/showproblem.php?pid=2883
#include <cstdio>#include <cstring>#include <memory.h>#include <cstdlib>#include <cmath>const int MAXN = 100010;const int MAXE = 400010;const int INF = 0x3f3f3f3f;struct Edge{ int to,next,cap,flow;}edge[MAXE];int tol;int head[MAXN];int gap[MAXN],dep[MAXN],pre[MAXN],cur[MAXN];void init(){ tol = 0; memset(head,-1,sizeof(head));}void addedge(int u,int v,int w,int rw = 0){ edge[tol].to = v;edge[tol].cap = w;edge[tol].next = head[u]; edge[tol].flow = 0;head[u] = tol ++; edge[tol].to = u;edge[tol].cap = rw;edge[tol].next = head[v]; edge[tol].flow = 0;head[v] = tol ++;}int sap(int start,int end,int N){ memset(gap,0,sizeof(gap)); memset(dep,0,sizeof(dep)); memcpy(cur,head,sizeof(head)); int u = start; pre[u] = -1; gap[0] = N; int ans = 0; while(dep[start] < N){ if(u == end){ int Min = INF; for(int i= pre[u];i!=-1;i=pre[edge[i^1].to]){ if(Min > edge[i].cap - edge[i].flow) Min = edge[i].cap - edge[i].flow; } for(int i= pre[u];i!=-1;i=pre[edge[i^1].to]){ edge[i].flow += Min; edge[i^1].flow -= Min; } u = start; ans += Min; continue; } bool flag = false; int v; for(int i=cur[u];i != -1;i = edge[i].next){ v = edge[i].to; if(edge[i].cap - edge[i].flow && dep[v] + 1 == dep[u]){ flag = true; cur[u] = pre[v] = i; break; } } if(flag){ u = v; continue; } int Min = N; for(int i = head[u];i != -1;i=edge[i].next){ if(edge[i].cap-edge[i].flow && dep[edge[i].to] < Min){ Min = dep[edge[i].to]; cur[u] = i; } } gap[dep[u]]--; if(!gap[dep[u]]) return ans; dep[u] = Min + 1; gap[dep[u]] ++; if(u != start) u = edge[pre[u]^1].to; } return ans;}int flag[1000005];void Deal_with(){ int n,m,numtot,t_max,si,ni,ei,ti,ans; while(~scanf("%d %d ",&n,&m)){ init(); memset(flag,0,sizeof(flag)); int start_point = 0,t_ans = 0; numtot = n; for(int i=1;i<=n;i++){ scanf("%d %d %d %d",&si,&ni,&ei,&ti); addedge(start_point,i,ni*ti); t_ans += ni * ti; si ++; for(int j = si ;j <= ei; j++){ if(!flag[j]) flag[j] = ++ numtot; addedge(i,flag[j],INF); } } numtot ++; int end_point = numtot; for(int i=1;i<=1000000;i++){ if(flag[i]){ addedge(flag[i],end_point,m); } } ans = sap(start_point,end_point,numtot+1); //printf("ans : %d t_ ans : %d\n",ans,t_ans); if(ans == t_ans){ puts("Yes"); } else{ puts("No"); } }}int main(void){ //freopen("a.in","r",stdin); Deal_with(); return 0;}
0 0
- hdu 2883 kebab
- hdu 2883 kebab
- HDU 2883 kebab
- hdu 2883 kebab
- hdu 2883 kebab
- HDU 2883 kebab 网络流
- HDU 2883 kebab 最大流判满流
- 【网络流】 hdu 2883 kebab
- hdu 2883 kebab(最大流)
- HDU 2883 —— kebab
- HDU 2883 kebab(离散化+最大流)
- 【网络流】 HDU 2883 kebab 离散
- hdu 2883 kebab 【网络最大流】
- HDU 2883 kebab(最大流)
- kebab (hdu 2883 网络流判满流 关键是缩点)
- HDU -- 2883 kebab(最大流判满流)
- HDU - 2883 kebab (最大流)
- HDU 2883 kebab 最大流(纯靠建图)
- mule,spring构建resful应用服务
- webapp弹层
- SQL Server游标的使用
- Swift Compiler Error Binary oprator '+' cannot be applied to operands of type 'UInt16' and 'UInt8'
- 设计模式--装饰模式(Decorator)
- hdu 2883 kebab
- 初步探索Log4j
- LeetCode Binary Tree Zigzag Level Order Traversal
- 使用WinDug查内存泄露
- STM32之系统重启
- GraphicsMagick和im4java按比例压缩图片
- 20150706
- C#读写txt文件的两种方法介绍
- windows下如何查看端口占用的程序