网络流 poj 1698
来源:互联网 发布:windows epub 阅读器 编辑:程序博客网 时间:2024/05/18 12:01
Alice 要拍电影,每天智能拍一部电影,现在有几部电影让他去拍,每部电影都有要求至少拍的天数和必须要在前几个礼拜拍完。
网络流的题目:
将这几个礼拜的天数全部拆成点,将所有点和这天能拍的所有电影连一条流量为1的边,原点与天数相连边权为1,所有电影与汇点相连,流量为电影所需天数。
注意:在加边的时候别忘了,如果now_week>week[i] 就不要将这天和电影i相连了。
282ms 代码 算法 Edmonds_Karp 邻接表
#include <iostream>#include <queue>#include <cstring>#include <vector>#define N 2000#define p 800#define INF 0x3f3f3f3fusing namespace std;const int q=2*p;int T,n,days;int total=0;int arr[N][N];int f[N];int a[N];int week[N];int R = 0;vector<int> tab[N];struct Edge{ int u,v,cap,flow; Edge(int a = 0,int b = 0,int c = 0):u(a),v(b),cap(c),flow(0){}}edge[N*N/20];void reset(){R = 0;for (int i=0;i<N;++i) tab[i].clear();}void AddEdge(int a,int b,int c){edge[R]=Edge(a,b,c);tab[a].push_back(R++);edge[R]=Edge(b,a);tab[b].push_back(R++);}int flow[N];int pre[N];bool done[N];int Edmonds_Karp(int s=0,int t=q){int max_flow=0;while(1){for (int i=0;i<N;++i)pre[i]=-1;memset(flow,0,sizeof(flow));flow[s] = INF;queue<int> Q;Q.push(s);while(!Q.empty()){int x = Q.front(); Q.pop();for (int i = 0; i < tab[x].size(); ++i){Edge & e = edge[tab[x][i]];if(pre[e.v] == -1 && e.cap > e.flow){pre[e.v] = tab[x][i];flow[e.v] = min(e.cap - e.flow, flow[x]);Q.push(e.v);}}if(flow[t] != 0)break;}if(flow[t] == 0)break;max_flow += flow[t];for (int u = t; u != s; u=edge[pre[u]].u){edge[pre[u]].flow += flow[t];edge[pre[u]^1].flow -= flow[t];}}return max_flow;}int counter = 0;int main(){bool flag;int x = 0; //temp variablecin >> T;while(T--){memset(done,0,sizeof(done));counter = 60;int max_weeks = 0;reset();flag = 1;total = 0;scanf("%d",&n);for (int k=1;k<=n;++k){ for (int i = 1;i <= 7;++i) //inputscanf("%d", &arr[k][i]); cin >> f[k] >> week[k]; total += f[k]; }// AddEdges,which is the most important for (int i = 1; i <= n; ++i) AddEdge(i,q,f[i]);for (int k = 1; k <= n ;++k) for (int j = 1 ;j <= week[k]; ++j) for (int i = 1; i <= 7;++i) { if(arr[k][i]) AddEdge(j*7+i,k,1); if(!done[j*7+i]) { done[j*7+i] = 1; AddEdge(0,j*7+i,1); } } int q = Edmonds_Karp(); if(q == total ) printf("Yes\n");else printf("No\n");}}
0 0
- POJ 1698 网络流
- 网络流 poj 1698
- POJ-1698-网络流构图
- POJ-1698-网络流最大流构图
- POJ 1698 网络流最大流水题
- poj 1698 Alice's Chance 网络流
- POJ 1698 图论之网络流
- poj 1698 Alice's Chance 网络流
- poj 1149 网络流
- poj 1149 网络流
- poj 1273 网络流
- poj 2112 网络流
- poj 3436 网络流
- poj 1087 网络流
- poj 1273 网络流
- poj 1149 网络流
- poj 3204 网络流
- POJ 1149 网络流
- 常量和变量
- “南大软院大神养成计划“_第十六天的学习“
- Linux 进程间通信--信号、TCP粘包处理
- CentOS排错
- Unique Binary Search Trees
- 网络流 poj 1698
- synchronized的作用
- CCF201312-4有趣的数
- ios8 系统定位问题
- 仿微信读书软件原型设计
- 每天一篇,有助消化
- RHEL6忘记root密码的解决办法
- Afinal框架的解析(一)
- 有序回文数