hdu2883 kebab(判满流)
来源:互联网 发布:钢铁力量六级车数据 编辑:程序博客网 时间:2024/05/22 03:23
由于时间大,所以要离散化
建图:
源点0
源点到任务点
add(sp,i,num*t);
任务点到时间区间
if(st[j]<=tim[i-1]&&tim[i]<=ed[j])add(j,n+i,inf);时间区间到汇点
add(n+i,tp,m*(tim[i]-tim[i-1]));
代码:
#include<cstring> #include<cstdio> #include<cmath>#include<iostream>#include<algorithm>#include<queue>#define N 1005 //估算点#define maxn 1<<26 #define inf 999999999using namespace std; struct edge{ int u,v,w,next;}e[20*N];int n,m;int edn; //边数 int head[N];int d[N];int sp,tp; //源点、汇点void add(int u,int v,int w){ e[edn].u=u;e[edn].v=v;e[edn].w=w; e[edn].next=head[u];head[u]=edn++; e[edn].u=v;e[edn].v=u;e[edn].w=0; e[edn].next=head[v];head[v]=edn++;} int bfs(){ queue<int>q; int i,j; memset(d,-1,sizeof(d)); d[sp]=0; q.push(sp); while(!q.empty()){ int cur=q.front(); q.pop(); for(i=head[cur];~i;i=e[i].next){ int v=e[i].v; if(d[v]==-1&&e[i].w>0){ d[v]=d[cur]+1; q.push(v); } } } return d[tp]!=-1;//返回是否能够到达汇点 }int dfs(int a,int b){ int r=0; int i; if(a==tp)return b; for(i=head[a];~i;i=e[i].next){ int v=e[i].v; if(e[i].w>0&&d[v]==d[a]+1){ int x=min(e[i].w,b-r); x=dfs(v,x); r+=x; e[i].w-=x; e[i^1].w+=x; } } if(!r)d[a]=-2; return r;}int dinic(int sp,int tp){ int total=0; int t; while(bfs()){ while(t=dfs(sp,maxn)){ total+=t; } } return total;}int st[N],ed[N],tim[N];int main(){ while(scanf("%d%d",&n,&m)!=EOF){ int i,j; edn=0; memset(head,-1,sizeof(head)); int sum=0; sp=0; int cnt=0; for(i=1;i<=n;i++){ int num,t; scanf("%d%d%d%d",&st[i],&num,&ed[i],&t); tim[cnt++]=st[i]; tim[cnt++]=ed[i]; sum+=num*t; add(sp,i,num*t); } sort(tim,tim+cnt); cnt=unique(tim,tim+cnt)-tim;//去重 tp=n+cnt+1; for(i=1;i<cnt;i++){ add(n+i,tp,m*(tim[i]-tim[i-1])); for(j=1;j<=n;j++){ if(st[j]<=tim[i-1]&&tim[i]<=ed[j]){ add(j,n+i,inf); } } } if(sum==dinic(sp,tp))printf("Yes\n"); else printf("No\n"); //printf("%d\n",dinic(sp,tp)); } return 0;}
阅读全文
0 0
- hdu2883 kebab(判满流)
- HDU2883.kebab
- hdu2883 kebab
- 【最大流】【HDU2883】【kebab】
- HDU2883 kebab(最大流)
- HDU2883 kebab(中等) [最大流]判断满流(数据离散化)
- hdu2883
- hdu2883
- HDU 2883 kebab(最大流)
- HDU -- 2883 kebab(最大流判满流)
- HDU - 2883 kebab (最大流)
- HDU 2883 kebab 最大流(纯靠建图)
- 集训队专题(7)1005 kebab
- HDOJ 2883 kebab (网络流)
- HDU 2883kebab(网络流之最大流)
- 【HDU】 2883 kebab(最大流+时间段离散化)
- hdu 2883 kebab(时间区间压缩 && dinic)
- 2014-2015 ACM-ICPC, NEERC K Kebab House(dp)
- Hrbust 2210 A Wonderful Concert【Dp】水题
- XListView的上拉加载和下拉刷新
- spring和cookie
- JAVA设计模式:状态模式
- 新员工转正申请书如何写呢?工作转正申请书范文分享
- hdu2883 kebab(判满流)
- RTMPdump(libRTMP) 源代码分析 6: 建立一个流媒体连接 (NetStream部分 1)
- ***********mysql关于多表查询解说详解****************
- 微信支付踩坑
- Centos7防火墙设置
- Text组件
- ubuntu matcaffe安装
- Android文件选择器
- Schlumberger.PIPESIM.2017.1.932.Win64 1DVD