HDU2883 kebab(最大流)
来源:互联网 发布:ipsos待遇 知乎 编辑:程序博客网 时间:2024/05/22 04:35
n位顾客要找老板烤肉串,第i个人要烤
这道题类似于HDU3572 Task Schedule,只是建图的方式不同。
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3572
题解:http://blog.csdn.net/cqbzwja/article/details/50877048
这道题不能像上面那道题一样把时间分成1分钟的小段,因为
源点s向每个人连边,容量为
最后求出最大流。比较
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>#define MAXN 100010#define INF 0x3f3f3f3fusing namespace std;inline int Min(int a,int b){return a<b?a:b;}struct E{ int v,w,op; E(){} E(int a,int b,int c) {v = a; w = b; op = c;}};vector<E> g[MAXN];int d[MAXN],vd[MAXN],s,t,ni[MAXN],ti[MAXN],si[MAXN],ei[MAXN];int N,M,cnt,table[MAXN],flow,sum;int aug(int i,int augco){ int augc = augco,j,mind = t-1,delta,sz = g[i].size(); if(i == t) return augco; for(j = 0; j < sz; j++) { int v = g[i][j].v; if(g[i][j].w) { if(d[i] == d[v]+1) { delta = Min(augc,g[i][j].w); delta = aug(v,delta); g[i][j].w -= delta; g[v][g[i][j].op].w += delta; augc -= delta; if(d[s] >= t) return augco - augc; if(augc == 0) break; } if(d[v] < mind) mind = d[v]; } } if(augc == augco) { vd[d[i]]--; if(vd[d[i]] == 0) d[s] = t; d[i] = mind+1; vd[d[i]]++; } return augco-augc;}void sap(){ memset(d,0,sizeof d); memset(vd,0,sizeof vd); flow = 0; vd[0] = t; while(d[s] < t) flow += aug(s,INF);}void init(){ for(int i = 1; i <= N; i++) ni[i] = ti[i] = si[i] = ei[i] = 0; for(int i = 1; i <= t; i++) g[i].clear(); memset(table,0,sizeof table); cnt = sum = 0;}int main(){ while(scanf("%d%d",&N,&M) != EOF) { s = N+1; for(int i = 1; i <= N; i++) { scanf("%d%d%d%d",&si[i],&ni[i],&ei[i],&ti[i]); table[++cnt] = si[i]; table[++cnt] = ei[i]; sum += ni[i]*ti[i]; g[s].push_back(E(i,ni[i]*ti[i],g[i].size())); g[i].push_back(E(s,0,g[s].size()-1)); } sort(table+1,table+cnt+1); int len = unique(table+1,table+cnt+1) - (table+1); t = s+len+1; for(int i = 1; i <= N; i++) for(int j = 2; j <= len; j++) if(si[i] <= table[j-1]&&ei[i] >= table[j]) { int x = s+j-1; g[i].push_back(E(x,INF,g[x].size())); g[x].push_back(E(i,0,g[i].size()-1)); } for(int i = 2; i <= len; i++) { int x = s+i-1; g[x].push_back(E(t,(table[i]-table[i-1])*M,g[t].size())); g[t].push_back(E(x,0,g[x].size()-1)); } sap(); if(flow == sum) printf("Yes\n"); else printf("No\n"); init(); }}
0 0
- 【最大流】【HDU2883】【kebab】
- HDU2883 kebab(最大流)
- HDU2883.kebab
- hdu2883 kebab
- HDU2883 kebab(中等) [最大流]判断满流(数据离散化)
- hdu2883(DINIC最大流)
- hdu2883 kebab(判满流)
- hdu 2883 kebab(最大流)
- HDU kebab(网络流,最大流)
- hdoj 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(离散化+最大流)
- 设计模式之概述
- 一些css、css3画的效果等,持续更新
- Ubuntu重置登录密码
- YTU:结构体---点坐标结构体
- creation of element failed MALFROMED eclipse 创建类失败
- HDU2883 kebab(最大流)
- HDU1236排名
- OpenSSL BN_CTX usage
- 1000搬桌子
- 经典SQL语句大全
- 报错Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.PagerTabStrip"
- [bzoj3202][SDOI2013]项链
- 省赛第一次选拔赛K题
- Xcode:Other linker flags