最大流(dinic) hdu3572
来源:互联网 发布:苏州爱知电机有限公司 编辑:程序博客网 时间:2024/05/02 01:31
/**题意:给n个任务,m台机器,每个任务给出开始时间y,结束时间z和完成所需时间x。求能否完成这些任务。建图:从一个源点s向每个任务连一条边,容量为完成所需时间,表示每个任务需要花费时间。从每个任务向从y到z的每一天连一条边,容量为1,表示该任务可以在哪些天完成。从每天向汇点连一条边,容量为m,表示每天最多运行m个任务。**/#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <queue>using namespace std;struct edge{int to,cap,rev;};const int INF=10000000000,max_v=1010;vector<edge> G[max_v];int level[max_v];int iter[max_v];void add_edge(int from,int to,int cap){ G[from].push_back((edge){to,cap,G[to].size()}); G[to].push_back((edge){from,0,G[from].size()-1});}void bfs(int s){ memset(level,-1,sizeof(level)); queue<int> que; level[s]=0; que.push(s); while(!que.empty()) { int v=que.front(); que.pop(); for(int i=0;i<G[v].size();i++) { edge& e=G[v][i]; if(e.cap>0 && level[e.to]<0) { level[e.to]=level[v]+1; que.push(e.to); } } }}int dfs(int v,int t,int f){ if(v==t) return f; for(int &i = iter[v];i<G[v].size();i++) { edge &e=G[v][i]; if(e.cap>0 && level[v]<level[e.to]) { int d=dfs(e.to,t,min(f,e.cap)); if(d>0) { e.cap-=d; G[e.to][e.rev].cap+=d; return d; } } } return 0;}int max_flow(int s,int t){ int flow=0; for(;;) { bfs(s); if(level[t]<0) return flow; memset(iter,0,sizeof(iter)); int f; while((f=dfs(s,t,INF))>0) { flow+=f; } } return flow;}int main(){ int t,i,n,m,x,y,z,sum,j; scanf("%d",&t); int kase=1; while(t--) { sum=0; for(i=0;i<=1005;i++) G[i].clear(); scanf("%d%d",&n,&m); int maxn=0; for(i=1;i<=n;i++) { scanf("%d%d%d",&x,&y,&z); add_edge(0,i,x); for(j=y+n;j<=z+n;j++) add_edge(i,j,1); sum+=x; maxn=max(maxn,z); } for(i=1+n;i<=maxn+n;i++) add_edge(i,1005,m); int tmp=max_flow(0,1005); printf("Case %d: ",kase++); if(tmp==sum) printf("Yes\n\n"); else printf("No\n\n"); } return 0;}
0 0
- 最大流(dinic) hdu3572
- hdu3572(DINIC最大流)
- hdu3572 Task Schedule(最大流dinic)
- HDU3572(最大流)
- hdu3572 Task Schedule 网络流(Dinic)
- hdu3572--Task Schedule(最大流+两种优化方法,dinic)
- hdu3572 Task Schedule(Dinic判断是否满流)
- HDU3572:Task Schedule(最大流)
- hdu3572 最大流
- hdu3572 最大流
- hdu3572 建图 最大流
- hdu3572 Task Schedule--Dinic算法 & 最大流 & 链式前向星 & vector
- hdu3572,网络流,dinic算法实现
- hdu3572 Task Schedule (最大流)
- HDU3572 Task Schedule 【最大流】
- 【最大流】【HDU3572】Task Schedule
- HDU3572 Task Schedule(最大流)
- hdu3572 Task Schedule【最大流】
- android视频播放器
- 从源文件中读入2048个字节到目标文件
- android选择时间控件
- jQuery与Zepto
- 170226
- 最大流(dinic) hdu3572
- rails资源
- 配置maven环境以及eslipse的一些配置
- 程序员练级攻略----转自酷壳网coolshell.c n
- week1-NO.1 Two Sum
- AOJ0033 (DFS)
- CSU-1022
- 二月英语主旋律——发音练习
- codeforce 738 C Road to Cinema 选车 (二分)