POJ 3686:The Windy's(最小费用最大流)***
http://poj.org/problem?id=3686
题意:给出n个玩具和m个工厂,每个工厂加工每个玩具有一个时间,问要加工完这n个玩具最少需要等待的平均时间。例如加工1号玩具时间为t1,加工2号玩具时间为t2。那么先加工玩具1再加工玩具2花费的时间是t1+(t1+t2),先加工玩具2在加工玩具1花费的时间是t2+(t1+t2)。
思路:假设所有玩具在一个工厂加工,那么等待的时间是
t1 + (t1 + t2) + (t1 + t2 + t3) + ……
= t1 * n + t2 * (n-1) + t3 * (n-2) + ……
那么可以把每个工厂能够加工n个玩具转化成有n个工厂每个只能够加工一个玩具,即每个工厂被划分成权值w为1,2,3,……,n的工厂,然后每个工厂制造某个玩具花费的时间为权值*本来需要的时间。
建图即:
源点向每个玩具连流量为1,费用为0的边,
每个玩具向每个工厂连流量为1,费用为w(w为工厂的权值)*cost的边,
每个工厂向源点连流量为1,费用为0的边。
然后跑一遍最小费用最大流,最后把答案除以玩具数就是最终答案。
这个建图思维很厉害。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define N 2666
#define INF 0x3f3f3f3f
struct Edge {
int u, v, nxt, cap, cost;
Edge () {}
Edge (int u, int v, int nxt, int cap, int cost) : u(u), v(v), nxt(nxt), cap(cap), cost(cost) {}
} edge[N*N];
int n, m, mp[][], head[N], tot, pre[N], dis[N], vis[N], S, T; void Add(int u, int v, int cap, int cost) {
edge[tot] = Edge(u, v, head[u], cap, cost); head[u] = tot++;
edge[tot] = Edge(v, u, head[v], , -cost); head[v] = tot++;
} bool SPFA(int S, int T) {
queue<int> que; que.push(S);
memset(dis, INF, sizeof(dis));
memset(vis, , sizeof(vis));
dis[S] = , vis[S] = ;
while(!que.empty()) {
int u = que.front(); que.pop();
vis[u] = ; // 忘了这句.WA了N久
for(int i = head[u]; ~i; i = edge[i].nxt) {
int v = edge[i].v, cap = edge[i].cap, cost = edge[i].cost;
if(dis[v] > dis[u] + cost && cap > ) {
dis[v] = dis[u] + cost; pre[v] = i;
if(!vis[v]) vis[v] = , que.push(v);
}
}
}
return dis[T] < INF;
} double MFMC(int S, int T) {
int u, flow;
double ans = ;
while(SPFA(S, T)) {
u = T, flow = INF;
while(u != S) {
if(flow > edge[pre[u]].cap) flow = edge[pre[u]].cap;
u = edge[pre[u]].u;
} u = T;
while(u != S) {
edge[pre[u]].cap -= flow, edge[pre[u]^].cap += flow;
ans += edge[pre[u]].cost * flow;
u = edge[pre[u]].u;
}
}
return ans;
} int main() {
int t; scanf("%d", &t);
while(t--) {
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++)
for(int j = ; j <= m; j++)
scanf("%d", &mp[i][j]);
S = , T = n * m + n + ;
memset(head, -, sizeof(head)); tot = ;
for(int i = ; i <= n; i++) {
Add(S, i, , );
for(int j = ; j <= m; j++) {
Add(j * n + i, T, , );
for(int k = ; k <= n; k++) {
Add(i, j * n + k, , k * mp[i][j]);
}
}
}
printf("%.6f\n", MFMC(S, T) / n);
}
return ;
}
POJ 3686:The Windy's(最小费用最大流)***的更多相关文章
- POJ 3686 The Windy's 最小费用最大流
每个工厂拆成N个工厂,费用分别为1~N倍原费用. //#pragma comment(linker, "/STACK:1024000000,1024000000") #includ ...
- 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个区间 ...
随机推荐
- Oracle召回
后几集录制视频,记录在记录开始的时候不知道怎么,录了几集没有什么,够又一次录,过程中也也把Oracle数据库这部分看了一遍,收获也挺多的,学习是反复积累的过程,对于一些零散的知识点又回想了一下,又一次 ...
- WPF 页面切换效果
原文:WPF 页面切换效果 最近做一个有页面切换的吧.. 我觉得这个功能是比较基础的吧.. 在网上百度了一下.. 用NavigationWindow的比较好.. 因为Demo中是带了淡入淡出的页面效果 ...
- SQL Server查询当前连接数
行数就是连接数,每一行是连接详情 SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID] FROM [M ...
- 通通玩blend美工(6)上——仿iPhone滚动选择器的ListBox(UI设计)
原文:通通玩blend美工(6)上--仿iPhone滚动选择器的ListBox(UI设计) 好久没更新博客了,由于项目比较紧,期间收到不少园友的短消息,感谢大家对我的支持~~. 相信各位都在自己的神机 ...
- MVC 调试路由
1.添加引用RouteDebug.dll 2 修改Global.asax,切记调试过后要删掉 using System;using System.Collections.Generic;using S ...
- 使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置
原文:使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置 摘要 讲解在IntelliJ IDEA中,如何进行Mysql数据库的配置 目录[-] 文章已针对IDEA 15做了一定的 ...
- 微信小程序把玩(二十)slider组件
原文:微信小程序把玩(二十)slider组件 slider滑动组件用的不太多,在其他平台反正我是用的不多 主要属性: wxml <slider max="100" step= ...
- 记一次ASP.NET MVC4 升级到MVC5的小问题解决
原文:记一次ASP.NET MVC4 升级到MVC5的小问题解决 .NET 4.0 MVC4版本,升级到.NET 4.6.1 MVC5: 1.使用nuget更新所有 与mvc相关的类库; 2.更改~/ ...
- Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案
原文:Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案 一打开虚拟机电脑就立马蓝屏重启,新建虚拟机也没用,然后就开始 ...
- mingw(gcc)默认使用的是dwarf格式
无意中发现的: C:\Users\my>gcc -vUsing built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=C:/Qt/Qt5.6.2/T ...