POJ 3308
http://poj.org/problem?id=3308
考虑答案不是乘积而是和的做法,
因为对于每一个伞兵我们要么在这行内安装大炮消灭它
要么在这列中安装大炮消灭它,所以容易看出这是一个最小边覆盖集的问题
所以转化成乘积需要用到一个特殊的方法(以前没用过)
\(ans=a_1a_2\cdots a_k\)
\(ans=10^{\lg ans}=10^{\lg a_1a_2\cdots a_k}\)
\(ans=10^{\lg a_1+\lg a_2+\cdots \lg a_k}\)
这样就将乘法转化成加法了
不过还是遇到一个问题不知道如何解决
这个边的流量如果是浮点数如何解决
…………………………………………
#include<iostream>
#include<cstring>
#include<cstdio>
#include<stack>
#define N 1000005
#define inf 0x3f3f3f3f
using namespace std;
int read(){
int s=0;char ch=getchar();
for(;!isdigit(ch);ch=getchar());
for(;isdigit(ch);s=s*10+ch-'0',ch=getchar());
return s;
}
struct Edge{
int to,nxt,cap;
};
int que[N];
int h,qt;
struct Dinic{
Edge e[N];
bool vis[N];
int tot,s,t,n;
int d[N],cur[N],head[N];
Dinic(){tot=1;}
void add(int u,int v,int f){
e[++tot].to=v;
e[tot].cap=f;
e[tot].nxt=head[u];
head[u]=tot;
e[++tot].to=u;
e[tot].cap=0;
e[tot].nxt=head[v];
head[v]=tot;
}
bool bfs(){
memset(vis,false,sizeof(vis));
for(int i=0;i<=n;++i)cur[i]=head[i];
que[qt=1]=s,h=0;int top,to;d[s]=0;vis[s]=1;
while(h<qt){
top=que[++h];
for(int i=head[top];i;i=e[i].nxt)
if(!vis[e[i].to]&&e[i].cap){
to=e[i].to;que[++qt]=to;
vis[to]=true;d[to]=d[top]+1;
if(to==t)return true;
}
}
return vis[t];
}
int dfs(int x,int fl){
if(x==t)return fl;
int flow=0,f,to;
for(int &i=cur[x];i;i=e[i].nxt){
to=e[i].to;
if(d[to]==d[x]+1&&e[i].cap)
if(f=dfs(to,min(fl,e[i].cap))){
e[i].cap-=f;fl-=f;
e[i^1].cap+=f;flow+=f;
if(fl<=0)break;
}
}
if(fl)d[x]=-1;
return flow;
}
int maxflow(int s,int t){
this->s=s;this->t=t;
int ans=0;
while(bfs())ans+=dfs(s,inf);
return ans;
}
};
int co[N];
int st[N];
double Co[N];
double St[N];
int main(){
Dinic f;
int n,m,k,s,t,a,b,c;
scanf("%d%d%d",&n,&m,&k);
f.n=2+n+m;
for(int i=1;i<=n;++i){
cin>>co[i];
Co[i]=log10(co[i]);
}
for(int i=1;i<=n;++i)
f.add(1,i+1,Co[i]);
for(int j=1;j<=m;++j)
f.add(n+m+2,n+1+i);
for(int i=1;i<=n;++i){
cin>>st[i];
St[i]=log10(st[i]);
}
for(int i=1;i<=k;++i){
cin>>a>>b;
f.add(a,b,inf);
}
cout<<f.maxlflow(1,n+m+2);
return 0;
}
POJ 3308的更多相关文章
- POJ - 3308 Paratroopers(最大流)
1.这道题学了个单词,product 还有 乘积 的意思.. 题意就是在一个 m*n的矩阵中,放入L个敌军的伞兵,而我军要在伞兵落地的瞬间将其消灭.现在我军用一种激光枪组建一个防御系统,这种枪可以安装 ...
- poj 3308 Paratroopers
http://poj.org/problem?id=3308 #include <cstdio> #include <cstring> #include <algorit ...
- POJ 3308 Paratroopers(最小点权覆盖)(对数乘转加)
http://poj.org/problem?id=3308 r*c的地图 每一个大炮可以消灭一行一列的敌人 安装消灭第i行的大炮花费是ri 安装消灭第j行的大炮花费是ci 已知敌人坐标,同时消灭所有 ...
- poj 3308(最小点权覆盖、最小割)
题目链接:http://poj.org/problem?id=3308 思路:裸的最小点权覆盖,建立超级源点和超级汇点,将源点与行相连,容量为这行消灭敌人的代价,将列与汇点相连,容量为这列消灭敌人的代 ...
- POJ 3308 Paratroopers(最小割EK(邻接表&矩阵))
Description It is year 2500 A.D. and there is a terrible war between the forces of the Earth and the ...
- POJ - 3308 Paratroopers (最小点权覆盖)
题意:N*M个格点,K个位置会有敌人.每行每列都有一门炮,能打掉这一行(列)上所有的敌人.每门炮都有其使用价值.总花费是所有使用炮的权值的乘积.求最小的总花费. 若每门炮的权值都是1,就是求最小点覆盖 ...
- 网络流 poj 3308 最小割
t个样例 n*m的矩阵 L个伞兵 给出每行每列装激光的花费 伞兵的位置 要求杀死所有伞兵 总费用为这些费用的乘积 求花费最小 建图 源点 -> 行 -> 列 -> 汇点 ...
- POJ 3308 Paratroopers (对数转换+最小点权覆盖)
题意 敌人侵略r*c的地图.为了消灭敌人,可以在某一行或者某一列安置超级大炮.每一个大炮可以瞬间消灭这一行(或者列)的敌人.安装消灭第i行的大炮消费是ri.安装消灭第j行的大炮消费是ci现在有n个敌人 ...
- POJ 3308 Paratroopers(最小割EK)
题目链接 题意 : 有一个n*m的矩阵,L个伞兵可能落在某些点上,这些点的坐标已知,需要在某些位置安上一些枪,然后每个枪可以将一行或者一列的伞兵击毙.把这种枪安装到不同行的行首.或者不同列的列首,费用 ...
随机推荐
- 关于wesocket大文件通讯的切片实现方法
关于websocket的实现网上很多资料这里就不详说,这里大概讲我在websocket传输大文件的时的方法,websocket传输单个文件最大不能超过7kg,否则前段自动断掉,当我们用来语音通讯时,通 ...
- Linux 第30天: (08月5日) 练习和作业
变量脚本 1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小 server_ip=`if ...
- 基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)
界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+ThinkJS+MySQL 计划添加基于Vue.js的后台管 ...
- CodeBlocks调试功能快捷教程
在程序设计中,单步调试能够跟踪程序的执行流程.跟踪过程中,还可以观察变量的变化,从而发现其中存在的问题.单步执行除了可以帮助我们发现设计的程序中存在的问题,对于初学者,还可以帮助我们理解语言的机制. ...
- Android IntentService分析
IntentService其实是一个很通用的知识点,最近看了下阿里巴巴Android开发手册,再次记录下 阿里巴巴Android开发手册 [强制]避免在 BroadcastReceiver#onRec ...
- bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树
[Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 93 Solved: 53[Submit][Status][ ...
- YARN和MapReduce的内存设置参考
如何确定Yarn中容器Container,Mapreduce相关参数的内存设置,对于初始集群,由于不知道集群的类型(如cpu密集.内存密集)我们需要根据经验提供给我们一个参考配置值,来作为基础的配置. ...
- ZooKeeper管理员指南——部署与管理ZooKeeper
1.部署 本章节主要讲述如何部署ZooKeeper,包括以下三部分的内容: 系统环境 集群模式的配置 单机模式的配置 系统环境和集群模式配置这两节内容大体讲述了如何部署一个能够用于生产环境的ZK集群. ...
- java 反射和new的区别
关于java 反射和new的区别,在这里我不做多讲,因为网上有大把资料,描述得很详细. 今天我只讲一点,为什么要用反射?直接用new不行么?干嘛弄得那么麻烦! 1.基本上效果差不多,但是new对象,无 ...
- MyBatis框架的使用及源码分析(八) MapperMethod
从 <MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory> 文中,我们知道Mapper,通过MapperProxy ...