HDU 3572 Task Schedule (DINIC 邻接表实现)
来源:互联网 发布:政法工作大数据对策 编辑:程序博客网 时间:2024/06/09 18:42
YY了好久才弄出来。。。。每次问题都被喷。。。好伤心。。。
#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;#define N 1005#define INF 0x7ffffffint n,m,k;int level[N];struct node{ int to,next,cost;}edge[N*N];int head[N];int t_head[N];int start,end;void init(){ k=0; memset(head,-1,sizeof(head));}int bfs(int s,int t)//对顶点进行标号、找出层次图{ memset(level,0,sizeof(level)); queue<int>q; q.push(s); level[s]=1; while(!q.empty()) { int now=q.front(); q.pop(); for(int i=head[now];i!=-1;i=edge[i].next) { int y=edge[i].to; if(!level[y]&&edge[i].cost>0) { level[y]=level[now]+1; q.push(y); } } } return level[t]!=0;//汇点是否在层次图中}int dfs(int s,int cp)//在层次图中寻找增广路进行增广{ int flow=0,temp; int t; if(s==end||cp==0)return cp; for(;t_head[s]+1;t_head[s]=edge[t_head[s]].next) { int y=edge[t_head[s]].to; if(level[s]+1==level[y]) { temp=dfs(y,min(cp,edge[t_head[s]].cost)); if(temp>0) { edge[t_head[s]].cost-=temp; edge[t_head[s]^1].cost+=temp; flow+=temp; cp-=temp; if(cp==0)break; } } } return flow;}int dinic(){ int ans=0,flow=0; while(bfs(start,end))//汇点不在层次图中、算法终止 { for(int i=0;i<=end;i++) t_head[i]=head[i]; ans+=dfs(start,INF); } return ans;}void add(int x,int y,int val){ edge[k].to=y; edge[k].cost=val; edge[k].next=head[x]; head[x]=k++; edge[k].to=x; edge[k].cost=0; edge[k].next=head[y]; head[y]=k++;}int main(){ int t; int cas=1; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); init(); int sum=0; start=0,end=500+n+1; for(int i=1;i<=n;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); sum+=x; add(start,i,x); for(int j=y;j<=z;j++) add(i,j+n,1); } for(int i=1;i<=500;i++) add(i+n,end,m); int ans=dinic(); printf("Case %d: ",cas++); if(ans!=sum)printf("No\n\n"); else printf("Yes\n\n"); } return 0;}
0 0
- HDU 3572 Task Schedule (DINIC 邻接表实现)
- hdu 3572 Task Schedule(邻接表dinic)
- hdu 3572 Task Schedule(dinic)
- HDU 3572 Task Schedule(dinic)
- hdu 3572 Task Schedule (dinic算法)
- HDU ACM 3572 Task Schedule 网络最大流->dinic算法
- HDU 3572 Task Schedule(最大流-Dinic)
- HDU 3572 Task Schedule(最大流Dinic算法)
- hdu 3572 Task Schedule【最大流Dinic-----建图】
- hdu 3572 Task Schedule 最大流+建图+dinic入门
- hdu 3572 Task Schedule 最大流 Dinic算法
- hdu 3527 Task Schedule 最大流 Dinic
- hdu 3572 Task Schedule
- HDU 3572 Task Schedule
- hdu 3572 Task Schedule
- HDU 3572 Task Schedule
- hdu 3572 Task Schedule
- hdu 3572 Task Schedule
- LeetCode(Binary Tree Maximum Path Sum) 在二叉树中找出一条和最大的路径
- JAVA中foreach语句的使用
- ZOJ 3712 Hard to Play
- Windows 通过公钥访问Git Server
- C# 多线程协同完成一个任务
- HDU 3572 Task Schedule (DINIC 邻接表实现)
- CentOS / RHEL / Scientific Linux 6 Enable & Install EPEL Repo
- JW Player 网页视频媒体播放插件
- 中缀表达式转后缀表达式(逆波兰表达式)
- Maximal Rectangle -- LeetCode
- LeetCode(Validate Binary Search Tree) 判断一个二叉树是否是二叉搜索树
- poj 1226:Substrings
- cloudstack Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (install) on projec
- Discuz! X3.1 给您贴子里的图片加上ALT和title属性