HDU
来源:互联网 发布:手机共享网络给电脑 编辑:程序博客网 时间:2024/06/03 20:00
和上一道题差不多,都是时间的最大流。 时间段的取值很大,所以加一个t数组离散化一下。
#include<bits/stdc++.h>using namespace std;const int N=1005;const int M=100010;const int INF=0x3f3f3f3f;struct node{ int u,v,cap,next;}eage[M];int head[N];int cur[N],dep[N],gap[N];int S[N];int source,sink;int top;int n,m;int ss[N],nn[N],ee[N],tt[N];int t[N*10];void Add(int u,int v,int w){ eage[top].u=u; eage[top].v=v; eage[top].cap=w; eage[top].next=head[u]; head[u]=top++; eage[top].u=v; eage[top].v=u; eage[top].cap=0; eage[top].next=head[v]; head[v]=top++;}void BFS(){ queue<int>q; memset(dep,-1,sizeof(dep)); memset(gap,0,sizeof(gap)); gap[0]=1; dep[sink]=0; q.push(sink); while(!q.empty()) { int u=q.front(); q.pop(); for(int i=head[u];i!=-1;i=eage[i].next) { int v=eage[i].v; if(dep[v]==-1) { q.push(v); dep[v]=dep[u]+1; gap[dep[v]]++; } } }}int Sap(){ BFS(); memcpy(cur,head,sizeof(head)); int tot=0; int u=source; int ans=0; while(dep[source]<n) { if(u==sink) { int Min=INF; int inser; for(int i=0;i<=tot-1;i++) { if(Min>eage[S[i]].cap) { Min=eage[S[i]].cap; inser=i; } } for(int i=0;i<=tot-1;i++) { eage[S[i]].cap-=Min; eage[S[i]^1].cap+=Min; } ans+=Min; tot=inser; u=eage[S[tot]].u; } if(u!=sink&&gap[dep[u]-1]==0) break; int v; int i; for(i=cur[u];i!=-1;i=eage[i].next) { v=eage[i].v; if(eage[i].cap&&dep[v]+1==dep[u]) { break; } } if(i!=-1) { cur[u]=i; S[tot++]=i; u=v; continue; } int Min=n; for(int i=head[u];i!=-1;i=eage[i].next) { int v=eage[i].v; if(eage[i].cap&&dep[v]<Min) { Min=dep[v]; cur[u]=i; } } gap[dep[u]]--; dep[u]=Min+1; gap[dep[u]]++; if(u!=source)u=eage[S[--tot]].u; } return ans;}int main(){ while(~scanf("%d%d",&n,&m)) { memset(head,-1,sizeof(head)); top=0; int sum=0; source=0; int o=0; for(int i=1;i<=n;i++) { scanf("%d%d%d%d",&ss[i],&nn[i],&ee[i],&tt[i]); sum+=nn[i]*tt[i]; Add(source,i,nn[i]*tt[i]); t[o++]=ss[i]; t[o++]=ee[i]; } sort(t,t+o); int cnt=unique(t,t+o)-t; sink=n+cnt+1; for(int i=1;i<=cnt-1;i++) { Add(n+i,sink,m*(t[i]-t[i-1])); for(int j=1;j<=n;j++) { if(ss[j]<=t[i-1]&&t[i]<=ee[j]) { Add(j,n+i,INF); } } } n=n+cnt+2; if(sum==Sap())printf("Yes\n"); else printf("No\n"); } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- IDEA Error:java: 未结束的字符串文字(解决方式有截图)
- POJ3074-Sudoku
- HDU-1006 平面几何+区间枚举
- 解决win下安装wordcloud出错问题
- Mybatis逆向工程(生成pojo和mapper)
- HDU
- ajax提交字符串中的‘+’和‘&’都变成空白
- dubbo工作原理,集群容错,负载均衡
- PHP验证表单数据
- demo1
- securecrt7.0破解版安装与注册机的使用方法
- 最全的正则表达式大全(包括校验数字、字符、一些特殊的需求等)
- 学习总结
- 文件下载