ACM/ICPC 之 伞兵-最小割转最大流(POJ3308)
- //以行列建点,伞兵位置为单向边-利用对数将乘积转加法
- //最小割转最大流
- //Time:63Ms Memory:792K
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- #include<cmath>
- #include<algorithm>
- #include<queue>
- using namespace std;
- #define MAXN 105
- #define INF 100000
- #define EPS 1e-7
- int n,m,p;
- int s,t;
- double res[MAXN][MAXN];
- int pre[MAXN];
- bool bfs()
- {
- memset(pre,-1,sizeof(pre));
- queue<int> q;
- q.push(s); pre[s] = 0;
- while(!q.empty()){
- int cur = q.front();
- q.pop();
- for(int i = 1; i <= t; i++)
- {
- if(pre[i] == -1 && res[cur][i] > EPS)
- {
- pre[i] = cur;
- if(i == t) return true;
- q.push(i);
- }
- }
- }
- return false;
- }
- double EK()
- {
- double maxFlow = 0;
- while(bfs()){
- double mind = INF;
- for(int i = t; i != s; i = pre[i])
- mind = min(mind, res[pre[i]][i]);
- for(int i = t; i != s; i = pre[i])
- {
- res[pre[i]][i] -= mind;
- res[i][pre[i]] += mind;
- }
- maxFlow += mind;
- }
- return maxFlow;
- }
- int main()
- {
- //freopen("in.txt", "r", stdin);
- int T;
- scanf("%d",&T);
- while(T--){
- memset(res,0,sizeof(res));
- scanf("%d%d%d", &n,&m,&p);
- s = 0; t = n + m + 1;
- double c;
- for(int i = 1; i <= n; i++)
- {
- scanf("%lf", &c);
- res[s][i] = log(c); //乘法转为加法
- }
- for(int i = 1; i <= m; i++)
- {
- scanf("%lf", &c);
- res[i+n][t] = log(c);
- }
- for(int i = 1; i <= p; i++)
- {
- int rr,cc;
- scanf("%d%d", &rr,&cc);
- res[rr][cc+n] = INF;
- }
- printf("%.4f\n", exp(EK())); //恢复
- }
- return 0;
- }
ACM/ICPC 之 伞兵-最小割转最大流(POJ3308)的更多相关文章
- 【Luogu】P2057善意的投票(最小割转最大流)
题目链接 也算水题一道吧,不过Round1感性理解一下就xjb建了个图,40 Round2仔细分析了一会,理性建了个图,90 然后分析了半天……改大数组就A了…… 从S到所有值为1的点连一条inf的边 ...
- HDU4289 Control —— 最小割、最大流 、拆点
题目链接:https://vjudge.net/problem/HDU-4289 Control Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
- nyoj 667 碟战 最小割(最大流)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=677 题意转化:将点0与所有的有间谍的点相连,则题意变为求点0到点n的最小割,直接套最大流 ...
- [洛谷]P3729 曼哈顿计划EX(最小割树/等价流树)
题目大意:给出一张n个点m条边的无向图,每个点有点权,q次询问,每次给出k,要求选出若干个点点权之和不小于k,求一个最大的值x,使得选出的点中任意两点之间至少有x条互不相交的链.(n<=550, ...
- BZOJ.3532.[SDOI2014]LIS(最小割ISAP 退流)
BZOJ 洛谷 \(LIS\)..经典模型? 令\(f_i\)表示以\(i\)结尾的\(LIS\)长度. 如果\(f_i=1\),连边\((S,i,INF)\):如果\(f_i=\max\limits ...
- [bzoj3532][Sdoi2014]Lis——拆点最小割+字典序+退流
题目大意 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若 干项,使得4的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案. 如果有多种方案,请输出将删去项的附加属性 ...
- 【Luogu】P2598狼和羊的故事(最小割转最大流)
题目链接 最小割水题.入点向白点连边,白点向白点.黑点和空点连边,空点向空点和黑点连边,黑点向黑点和汇点连边.然后跑最大流即可. 话说Fd最近怎么光做水题啊……一点用都没有……qwq 我太菜了,做完一 ...
- BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- hdu3491最小割转最大流+拆点
题意:求最小割,即求最大流即可.此题之关键为拆点(限制在点),每条边都是双向边,注意一下. 未1A原因:在拆点之后添加边的过程中,要注意,出去的是i`,进来的是i,!!所以,写addegde函数时候 ...
随机推荐
- 大流量网站性能优化:一步一步打造一个适合自己的BigRender插件
BigRender 当一个网站越来越庞大,加载速度越来越慢的时候,开发者们不得不对其进行优化,谁愿意访问一个需要等待 10 秒,20 秒才能出现的网页呢? 常见的也是相对简单易行的一个优化方案是 图片 ...
- win8安装SQL Server 2005问题解决方法
win8安装SQL Server 2005问题解决方法 1.正常安装任一版本的SQL Server 2005(最好安装企业版). 2.安装到SqlServer服务的时候提示启动服务失败(提示重试的时候 ...
- 聚类算法:K-means
2013-12-13 20:00:58 Yanjun K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大.该算法认为簇是由距离 ...
- 创建django项目
python /usr/local/lib/python3.4/dist-packages/Django-1.9.10-py3.4.egg/django/bin/django-admin.py sta ...
- 计算机中位(bit), 字节(byte), 字(word)的关系
1.位(bit) 来自英文bit,音译为“比特”,表示二进制位.位是计算机内部数据储存的最小单位,11010100是一个8位二进制数.一个二进制位只可以表示0和1两种状态(21):两个二进制位可以表示 ...
- Java中使用Jedis操作Redis(转载)
整理 1.字符串 添加:set keyname value 查询:get keyname 拼接:append keyname value 删除:del keyname 添加多个: mset keyna ...
- 根据浏览器显示界面大小变换,替换css文件方法
在1024屏幕下,选择适配1024屏幕的css文件, 在大于1024屏幕下,选择适配大屏幕的css文件. 在html中的head标签中引用css文件时,加入media属性. 例: <link r ...
- 没有为 COM 互操作注册程序集 请使用 regasm.exe /tlb 注册该程序集——解决办法
错误现象: 错误 6 没有为 COM 互操作注册程序集“DevExpress.Utils.v13.1, Version=13.1.7.0, Culture=neutral, PublicKeyToke ...
- 负载均衡的几种算法Java实现代码
轮询 package class2.zookeeper.loadbalance; import java.util.ArrayList; import java.util.HashMap; impor ...
- 新手指南: Linux 新手应该知道的 26 个命令
当你进入了 Linux 的世界,在下载.安装 了某个 Linux 发行版,体验了 Linux 桌面并安装了一些你喜爱和需要的软件之后,应该去了解下 Linux 真正的魅力所在:命令行.每一个 Linu ...