POJ 3686 The Windy's 最小费用最大流
每个工厂拆成N个工厂,费用分别为1~N倍原费用。
- //#pragma comment(linker, "/STACK:1024000000,1024000000")
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<algorithm>
- #include<iostream>
- #include<sstream>
- #include<cmath>
- #include<climits>
- #include<string>
- #include<map>
- #include<queue>
- #include<vector>
- #include<stack>
- #include<set>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<int,int> pii;
- #define pb(a) push(a)
- #define INF 0x1f1f1f1f
- #define lson idx<<1,l,mid
- #define rson idx<<1|1,mid+1,r
- #define PI 3.1415926535898
- template<class T> T min(const T& a,const T& b,const T& c) {
- return min(min(a,b),min(a,c));
- }
- template<class T> T max(const T& a,const T& b,const T& c) {
- return max(max(a,b),max(a,c));
- }
- void debug() {
- #ifdef ONLINE_JUDGE
- #else
- freopen("in.txt","r",stdin);
- // freopen("d:\\out1.txt","w",stdout);
- #endif
- }
- int getch() {
- int ch;
- while((ch=getchar())!=EOF) {
- if(ch!=' '&&ch!='\n')return ch;
- }
- return EOF;
- }
- const int maxn = ;
- int N, M;
- int cost[maxn][maxn];
- void Input()
- {
- scanf("%d%d", &N, &M);
- for(int i = ; i <= N; i++)
- for(int j = ; j <= M; j++)
- scanf("%d", &cost[i][j]);
- }
- struct Edge
- {
- int from, to, cost, cap;
- };
- const int maxv = maxn * maxn + maxn;
- vector<int> g[maxv];
- vector<Edge> edge;
- int n,s,t;
- void add(int from, int to, int cost, int cap)
- {
- edge.push_back((Edge){from, to, cost, cap});
- g[from].push_back(edge.size() - );
- edge.push_back((Edge){to, from, -cost, });
- g[to].push_back(edge.size() - );
- }
- void init()
- {
- for(int i = ; i <= n; i++)
- g[i].clear();
- edge.clear();
- }
- void construct()
- {
- n = N + N * M + ;
- s = n - ;
- t = n;
- init();
- for(int i = ; i <= N; i++)
- add(s, i, , );
- for(int k = ; k <= N; k++)
- {
- for(int j = ; j <= M; j++)
- {
- int id = N + (k - ) * M + j;
- add(id, t, , );
- for(int i = ; i <= N; i++)
- add(i, id, k * cost[i][j], );
- }
- }
- }
- int d[maxv];
- int inq[maxv];
- int road[maxv];
- int SPFA()
- {
- memset(d, INF, sizeof(d));
- memset(inq, , sizeof(inq));
- queue<int> q;
- q.push(s);
- d[s] = ;
- road[s] = -;
- while(!q.empty())
- {
- int u = q.front(); q.pop();
- inq[u] = false;
- for(int i = ; i < g[u].size(); i++)
- {
- Edge &e = edge[g[u][i]];
- if(e.cap > && d[u] + e.cost < d[e.to])
- {
- d[e.to] = d[u] + e.cost;
- road[e.to] = g[u][i];
- if(!inq[e.to])
- {
- inq[e.to] = true;
- q.push(e.to);
- }
- }
- }
- }
- return d[t] != INF;
- }
- int MCMF()
- {
- int cost = ;
- while(SPFA())
- {
- cost += d[t];
- for(int e = road[t]; e != -; e = road[edge[e].from])
- {
- edge[e].cap -= ;
- edge[e^].cap += ;
- }
- }
- return cost;
- }
- int main()
- {
- debug();
- int t;
- scanf("%d", &t);
- for(int ca = ; ca <= t; ca++)
- {
- Input();
- construct();
- printf("%.6f\n", MCMF() * 1.0 / N);
- }
- return ;
- }
POJ 3686 The Windy's 最小费用最大流的更多相关文章
- POJ 2195 Going Home(最小费用最大流)
http://poj.org/problem?id=2195 题意 : N*M的点阵中,有N个人,N个房子.让x个人走到这x个房子中,只能上下左右走,每个人每走一步就花1美元,问当所有的人都归位了之 ...
- POJ 2135 Farm Tour (最小费用最大流模板)
题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...
- POJ 2516 Minimum Cost (最小费用最大流)
POJ 2516 Minimum Cost 链接:http://poj.org/problem?id=2516 题意:有M个仓库.N个商人.K种物品.先输入N,M.K.然后输入N行K个数,每一行代表一 ...
- POJ 2195 Going Home 【最小费用最大流】
题目链接:http://poj.org/problem?id=2195 Time Limit: 1000MS Memory Limit: 65536K Total Submissions:2715 ...
- POJ 2135 Farm Tour(最小费用最大流)
Description When FJ's friends visit him on the farm, he likes to show them around. His farm comprise ...
- POJ - 2516 Minimum Cost(最小费用最大流)
1.K种物品,M个供应商,N个收购商.每种物品从一个供应商运送到一个收购商有一个单位运费.每个收购商都需要K种物品中的若干.求满足所有收购商需求的前提下的最小运费. 2.K种物品拆开来,分别对每种物品 ...
- POJ 2135 Farm Tour(最小费用最大流,变形)
题意:给一个无向图,FJ要从1号点出发到达n号点,再返回到1号点,但是路一旦走过了就会销毁(即回去不能经过),每条路长度不同,那么完成这趟旅行要走多长的路?(注:会有重边,点号无序,无向图!) 思路: ...
- POJ 3686 The Windy's (费用流)
[题目链接] http://poj.org/problem?id=3686 [题目大意] 每个工厂对于每种玩具的加工时间都是不同的, 并且在加工完一种玩具之后才能加工另一种,现在求加工完每种玩具的平均 ...
- POJ 3680:Intervals(最小费用最大流)***
http://poj.org/problem?id=3680 题意:给出n个区间[Li,Ri],每个区间有一个权值wi,要使得每个点都不被超过k个区间覆盖(最多能被k个区间覆盖),如果选取了第i个区间 ...
随机推荐
- 单节点nginx为两台apache服务器提供负载均衡
需求:本实验为单节点nginx为两台apache服务器提供负载均衡,所有配置为最简单 1.初始化3台测试server,该关的关了 [root@host101 ~]# vim /etc/hosts 19 ...
- MySQL日志恢复误删记录
1.查询日志是否开启 show variables like"log_"; 2.查询是用的哪个日志文件 show master status; 3.定位是在什么时间误删的 /usr ...
- Java 程序优化:字符串操作、基本运算方法等优化策略(二)
五.数据定义.运算逻辑优化 多使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈 (Stack) 里面,读写速度较快. 其他变量,如静态变量.等,都在堆实例变量 (heap) 中创 ...
- Linux scp复制文件,不需要输入密码的技巧
当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码. 把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 假 ...
- python的中文编码问题
下文转自 http://blog.csdn.net/mayflowers/article/details/1568852 1. 在Python中使用中文 在Python中有两种默认的字符 ...
- JavaScript笔记杂谈篇(啥都有)
二维码缩放比例以43PX的倍数缩放最为标准. NuGet相关管理http://www.cnblogs.com/dudu/archive/2011/07/15/nuget.html 学习笔记: http ...
- perl脚本基础总结
1. 单引号字符串中的\n不会被当做换行符处理. 如:'\'\\' --> '\ . 2. 双引号 字符串联 "Hello"."World" ...
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype:create -DgroupId=me.gacl -DartifactId=spring4-myba ...
- 如何防止ElasticSearch集群出现脑裂现象(转)
原文:http://xingxiudong.com/2015/01/05/resolve-elasticsearch-split-brain/ 什么是“脑裂”现象? 由于某些节点的失效,部分节点的网络 ...
- Address already in use的解决方法
当客户端保持着与服务器端的连接,这时服务器端断开,再开启服务器时会出现: Address already in usr. 可以用netstat -anp | more 可以看到客户端还保持着与服务器的 ...