POJ_3308

这个题目有点像二分图最小点集覆盖问题,但由于边带权,所以不能直接用二分图最大匹配来做。

参考了别人的想法之后,发现构图的时候原来还是要用的二分图的思想,将行、列分别看做一个集合,由于最后求费用乘积的最小值,所以先传化成log2形式的费用,源点与行之间的容量初始化为log2行费用,列与汇点之间的容量初始化log2列费用。之后对读入的伞兵位置对应的行和列之间连一条有向边,容量为INF。

最后只要求一下最小割就可以了,也就是最大网络流。

#include<stdio.h>#include<string.h>#include<math.h>double cap[110][110],flow[110][110],a[110];int q[110],p[110];int main(){int i,j,k,n,m,l,T,t,u,v,front,rear;double f,temp;    scanf("%d",&T);while(T--)    {        scanf("%d%d%d",&m,&n,&l);        t=m+n+1;for(i=0;i<=t;i++)for(j=0;j<=t;j++)          {            cap[i][j]=0.0;            flow[i][j]=0.0;          }for(i=1;i<=m;i++)        {          scanf("%lf",&temp);          cap[0][i]=log2(temp);        }for(i=m+1;i<t;i++)        {            scanf("%lf",&temp);            cap[i][t]=log2(temp);        }for(i=0;i<l;i++)        {            scanf("%d%d",&u,&v);            cap[u][m+v]=1000000000.0;        }        f=0;while(1)        {for(i=1;i<=t;i++)              a[i]=0.0;            a[0]=1000000000.0;            front=rear=0;            q[rear++]=0;while(front<rear)            {                u=q[front++];for(v=0;v<=t;v++)if(a[v]<1e-8&&cap[u][v]>flow[u][v])                  {                        temp=cap[u][v]-flow[u][v];                        a[v]=a[u]<temp?a[u]:temp;                        p[v]=u;                        q[rear++]=v;                  }            }if(a[t]<1e-8)break;for(u=t;u!=0;u=p[u])            {                flow[p[u]][u]+=a[t];                flow[u][p[u]]-=a[t];            }            f+=a[t];        }        printf("%.4f\n",pow(2,f));    }return 0;}

POJ 3308 Paratroopers相关推荐

  1. zoj 2874 amp; poj 3308 Paratroopers (最小割)

    意甲冠军: 一m*n该网络的规模格.详细地点称为伞兵着陆(行和列). 现在,在一排(或列) 安装激光枪,激光枪可以杀死线(或塔)所有伞兵.在第一i安装一排 费用是Ri.在第i列安装的费用是Ci. 要安 ...

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

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

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

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

  4. POJ 3308 最少点集覆盖

    题意:和Uva 11419 类似. 首先最少点集覆盖 = 最大匹配. 我们可以在 S 和行 的边 不是1,有了权值,但是题意要求的是乘积最小,那么可以用 log(a*b) = loga + logb ...

  5. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

  6. POJ 图论分类 + DP(较全 自己又加了点)

    DP -----------动态规划 状态压缩DP 2411 (棋盘规模较大)状态压缩DP+DFS+滚动数组 2664 (棋盘规模较小)直接递推即可(DP) 2506 (棋盘规模较小)直接递推即可(D ...

  7. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  8. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  9. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

最新文章

  1. php对接支付宝当面付对接,支付宝开放平台当面付对接网站
  2. Java编译器、JVM、解释器
  3. php ajax实现查询功能,ajax实现分页查询功能
  4. Hive 常见问题与技巧【Updating】
  5. P1971 [NOI2011]兔兔与蛋蛋游戏
  6. python爬取学籍_仝卓学籍造假微博道歉,用Python抓取微博的评论看看群众都说什么...
  7. C语言作业 – 数组排序算法可视化
  8. python 等差数列list_Python3基础 list range+for 等差数列
  9. Python实现WGS 84坐标与web墨卡托投影坐标的转换
  10. 怪物猎人online 日服 注册流程(原创)
  11. STM8S103之tim2PWM输出
  12. 图解通信原理与案例分析-16:2G GSM基站的工作原理--时分多址与无线资源管理RRM
  13. 圆柱体积怎么算立方公式_圆柱体积计算公式 怎么计算
  14. sysbench和lua的简单研究
  15. html视频如何转换成mp4视频格式,将MP4、MPEG、MOV等格式的视频转换成WEBM格式的方法...
  16. 恢复视力的方法(飞行员都用)治近视的秘方!1000度近视降到只有200
  17. git、gitlab+jenkens版本控制的安装、升级与灾备
  18. 计算机为什么无法访问公司共享文件夹,win10系统共享文件夹无法访问的详细方案...
  19. HTML 个人简历模板简易版
  20. 迅搜中文分词简明教程

热门文章

  1. 专为摩托车点火器中直流升压电路设计的控制芯片MST2218
  2. 一文看懂云计算、雾计算、霾计算、边缘计算以及认知计算
  3. cut the rope HTML 5版本背后的开发故事
  4. java+百度语音识别(语音助手)
  5. independent watchdog 独立看门狗 window watchdog 窗口看门狗
  6. JavaScript闭包实现计数器
  7. 要求车牌所有权,法院怎么判?
  8. 基于SSM开发的商品出入库系统 JAVA MySQL
  9. GIS二次开发实习——鹰眼功能模块的实现(鹰眼锁定不能动,红框与主地图联动)
  10. DDoS攻击的肉鸡都是哪来的?