意甲冠军:
一m*n该网络的规模格。详细地点称为伞兵着陆(行和列)。

现在,在一排(或列)
安装激光枪,激光枪可以杀死线(或塔)所有伞兵。在第一i安装一排
费用是Ri。在第i列安装的费用是Ci。

要安装整个激光枪系统,总费用为这些
激光枪费用的乘积。
求杀死全部伞兵的最小费用。

构图:
把伞兵视为边,行与列视为顶点。添加源点和汇点,对于第i行。从源点向顶点i连接一条
容量为Ri的边。对于第j列。从顶点j向汇点连接一条容量为Rj的边。
假设某一点(i,j)有伞兵降落,则从顶点Ri向顶点Cj连接一条容量为无穷大的边。

算法:
依据割的性质,源点和汇点必不连通。则割边必然在S->R,R->C,C->T其一。

为了求得最小容量,
将R->C设为无穷大,则其不可能被选中。这样割边集为S-->R,C-->T的集合,也就是选中行或列。
此时求得的最小割为花费最小的方案。

因为花费为行和列的乘积。则通过对数运算把乘法转化为加法。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#define maxm 15000
#define maxn 105
#define eps 1e-6
using namespace std;struct node
{int v,next;double val;
}e[maxm<<1];
int st,en,n,m,l,cnt;
int d[maxn];
int head[maxn],cur[maxn];
const double INF = 1000007;
queue<int> q;void init()
{st = 0,en = n+m+1;memset(head,-1,sizeof(head));cnt = 0;
}
void add(int x,int y,double z)
{e[cnt].v = y;e[cnt].val = z;e[cnt].next = head[x];head[x]=cnt++;e[cnt].v = x;e[cnt].val = 0;e[cnt].next = head[y];head[y]=cnt++;
}
bool bfs()
{while(!q.empty())q.pop();memset(d,-1,sizeof(d));int u;d[st] = 0;q.push(st);while(!q.empty()){u = q.front();q.pop();for(int i=head[u];i!=-1;i=e[i].next){int t = e[i].v;if(e[i].val>0 && d[t]==-1){d[t] = d[u]+1;q.push(t);if(t==en) return true;}}}return false;
}double dfs(int x,double flow)
{if(x==en || fabs(flow)<=eps) return flow;double ret = 0,dd;for(int& i=cur[x];i!=-1;i=e[i].next){int t = e[i].v;if(d[t] == d[x]+1 && (dd = dfs(t,min(flow,e[i].val)))>0){e[i].val-=dd;e[i^1].val+=dd;flow-=dd;ret+=dd;if (fabs(flow) <= eps) break;}}return ret;
}
double Dinic()
{double tmp = 0,maxflow = 0;while(bfs()){for(int i=0;i<=en;i++)cur[i] = head[i];maxflow+=dfs(st,INF);}return maxflow;
}int main()
{int T,a,b;double x;scanf("%d",&T);while(T--){scanf("%d%d%d",&m,&n,&l);init();for(int i=1;i<=m;i++){scanf("%lf",&x);add(st,i,log(x));}for(int i=1;i<=n;i++){scanf("%lf",&x);add(i+m,en,log(x));}for(int i=1;i<=l;i++){scanf("%d%d",&a,&b);add(a,b+m,INF);}printf("%.4f\n",exp(Dinic()));}return 0;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

zoj 2874 amp; poj 3308 Paratroopers (最小割)相关推荐

  1. poj 3308(最小割求解最小点权覆盖)

    火星人侵略地球,他们意图登陆破坏某个地区的兵器工厂.据探子回报,火星人登陆的地区为n*m大小的地域,而且每一个火星人的着陆点坐标已知. 火星人很强悍,只要有一个火星人着陆后能够幸存,他必定能毁坏这片区 ...

  2. POJ 3308 Paratroopers (对数转换+最小点权覆盖)

    题意 敌人侵略r*c的地图.为了消灭敌人,可以在某一行或者某一列安置超级大炮.每一个大炮可以瞬间消灭这一行(或者列)的敌人.安装消灭第i行的大炮消费是ri.安装消灭第j行的大炮消费是ci现在有n个敌人 ...

  3. poj 1815 Friendship 最小割 拆点 输出字典序

    题目链接:http://poj.org/problem?id=1815 题意:A与B能通信当且仅当A知道B的电话号或者A知道C的电话号且C与B能通信.若A知道B的电话号,那么B也知道A的电话号. 然而 ...

  4. poj 3084(最小割)

    题目链接:http://poj.org/problem?id=3084 思路:题目的意思是不让入侵者进入保护的房间,至少需要锁几道门.网络流建模:设一个超级源点,源点与有入侵者的房间相连,边容量为in ...

  5. POJ 3308 Paratroopers

    POJ_3308 这个题目有点像二分图最小点集覆盖问题,但由于边带权,所以不能直接用二分图最大匹配来做. 参考了别人的想法之后,发现构图的时候原来还是要用的二分图的思想,将行.列分别看做一个集合,由于 ...

  6. poj 2914(stoer_wanger算法求全局最小割)

    题目链接:http://poj.org/problem?id=2914 思路:算法基于这样一个定理:对于任意s, t   V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Cont ...

  7. POJ - 2914 Minimum Cut(全局最小割-Stoer_Wagner)

    题目链接:点击查看 题目大意:给出一张无向图,要求将其分为两个集合,使得最小割最小 题目分析:算法学习自:https://blog.csdn.net/dingdi3021/article/detail ...

  8. POJ 1966 Cable TV Network【无向图点连通度 最小割 E-K算法求最大流】

    题目描述: 给你一个无向图,问你最少删掉几个点,使这个图成不连通. 解题报告: 概念 (1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通, ...

  9. POJ 3469 Dual Core CPU (最小割建模)

    题意 现在有n个任务,两个机器A和B,每个任务要么在A上完成,要么在B上完成,而且知道每个任务在A和B机器上完成所需要的费用.然后再给m行,每行 a,b,w三个数字.表示如果a任务和b任务不在同一个机 ...

最新文章

  1. B2B电子商务网站杂谈
  2. spring boot配置dubbo注意事项
  3. bzoj2299 [HAOI2011]向量 结论 裴蜀定理
  4. 我的docker随笔2:docker在ubuntu上的安装
  5. .NET 对接JAVA 使用Modulus,Exponent RSA 加密
  6. matlab engevalstring,Matlab 執行engEvalString命令介紹 | 學步園
  7. 如何找回Oracle所有用户丢失的密码
  8. 一个 Python 报表自动化实战案例
  9. 数控g71编程实例带图_数控车床g71编程实例带图 表面速度130m/min主轴
  10. CoDeSys开发经验总结
  11. 西奥电梯服务器故障维修,干货│西奥电梯故障分析和技术文件
  12. 屏蔽广告、过滤广告。。。。(快烦死了。。。还好完事)
  13. 每天一点英文(记录)
  14. 手机闪存速度测试工具,AndroBench
  15. 旅游自助系统之后台管理系统设计
  16. 网络上游戏制作相关学习站点的网址! 1
  17. 利用websocket实现群聊以及单聊
  18. 微信android字体颜色,如何用微信打出颜色各异的字
  19. Linux qt 运动控制卡,运动控制卡应用开发教程之VB6.0
  20. 永辉系统服务器,永辉超市供应商服务系统.doc

热门文章

  1. python 验证回文串
  2. Spring注解大全(示例详解)
  3. php.ini权限,php开启与关闭错误提示适用于没有修改php.ini的权限_PHP
  4. zblogphp 广告联盟_停止折腾联盟广告样式,重新回归内容写作
  5. 找不到java.vbs_无法找到脚本*.VBS的脚本引擎解决办法
  6. mysql 外键有啥用途_Mysql外键是什么?有哪些用处?(图文+视频)
  7. 数据结构实验之图论二:图的深度遍历(DFS)
  8. Eddy的难题_JAVA
  9. VideoCapture类
  10. 【Linux】34. shell脚本判断当前年份是否正确