网络流 poj 3308 最小割
t个样例
n*m的矩阵 L个伞兵
给出每行每列装激光的花费
伞兵的位置
要求杀死所有伞兵 总费用为这些费用的乘积 求花费最小
建图 源点 -> 行 -> 列 -> 汇点
权 花费 inf 花费
花费相乘等于 log(花费)相加 都变成double 最后取e
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<math.h> using namespace std; int S,T,cnt;
#define inf 100000000
#define MAXN 2000
#define MAXN1 3500
int head[MAXN+];
int vis[MAXN+]; struct edg
{
int to,next;
double w;
}x[MAXN1*]; void add(int u,int v,double w)
{
x[cnt].next=head[u];
x[cnt].to=v;
x[cnt].w=w;
head[u]=cnt++;
}
int bfs()
{
queue<int>q1;
memset(vis,-,sizeof(vis));
vis[S]=;
q1.push(S); while(!q1.empty())
{
int now=q1.front();
q1.pop();
int j; for(j=head[now];j!=-;j=x[j].next)
{
if(vis[x[j].to]<&&x[j].w>)
{
vis[x[j].to]=vis[now]+;
q1.push(x[j].to);
}
}
}
return vis[T]!=-; }
double dfs(int u,double w)
{
double ans=;
if(u==T)
return w;
int j;
for(j=head[u];j!=-;j=x[j].next)
{
if(vis[x[j].to]==vis[u]+&&x[j].w>)
{
double b=dfs(x[j].to,min(w-ans,x[j].w));
x[j].w-=b;
x[j^].w+=b;
ans+=b;
}
}
return ans;
} int main()
{
int t;
scanf("%d",&t); while(t--)
{
int n,m,l,i;
scanf("%d%d%d",&n,&m,&l);
S=,T=n+m+;
cnt=;
memset(head,-,sizeof(head));
for(i=;i<=n;i++)
{
double a;
scanf("%lf",&a);
add(S,i,log(a)),add(i,S,);
}
for(i=;i<=m;i++)
{
double a;
scanf("%lf",&a);
add(i+n,T,log(a)),add(T,i+n,);
} for(i=;i<=l;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b+n,inf);
add(b+n,a,);
}
double ans=;
while(bfs())
ans+=dfs(S,inf); printf("%.4lf\n",exp(ans));
}
return ;
}
网络流 poj 3308 最小割的更多相关文章
- poj 3308(最小点权覆盖、最小割)
题目链接:http://poj.org/problem?id=3308 思路:裸的最小点权覆盖,建立超级源点和超级汇点,将源点与行相连,容量为这行消灭敌人的代价,将列与汇点相连,容量为这列消灭敌人的代 ...
- poj 3204(最小割--关键割边)
Ikki's Story I - Road Reconstruction Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 7 ...
- 【BZOJ】2561: 最小生成树【网络流】【最小割】
2561: 最小生成树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2685 Solved: 1253[Submit][Status][Discu ...
- poj 2125(最小割)
题目链接:http://poj.org/problem?id=2125 思路:将最小点权覆盖转化为最小割模型,于是拆点建图,将点i拆成i,i+n,其中vs与i相连,边容量为w[i]-,i+n与vt相连 ...
- POJ 3469 最小割 Dual Core CPU
题意: 一个双核CPU上运行N个模块,每个模块在两个核上运行的费用分别为Ai和Bi. 同时,有M对模块需要进行数据交换,如果这两个模块不在同一个核上运行需要额外花费. 求运行N个模块的最小费用. 分析 ...
- P1361 小M的作物 【网络流】【最小割】
题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第i种作物种植在A中种植可 ...
- 网络流 最大流—最小割 之SAP算法 详解
首先引入几个新名词: 1.距离标号: 所谓距离标号 ,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度). 设点i的标号为level[i],那么如果将满足level[i]=l ...
- POJ3308 Paratroopers(网络流)(最小割)
Paratroopers Time Limit: 1000MS Memory Limit: 655 ...
- poj 3084 最小割
题目链接:http://poj.org/problem?id=3084 本题主要在构图上,我采用的是把要保护的房间与源点相连,有intruder的与汇点相连,相对麻烦. #include <cs ...
随机推荐
- 第9章 用内核对象进行线程同步(3)_信号量(semaphore)、互斥对象(mutex)
9.5 信号量内核对象(Semaphore) (1)信号量的组成 ①计数器:该内核对象被使用的次数 ②最大资源数量:标识信号量可以控制的最大资源数量(带符号的32位) ③当前资源数量:标识当前可用资源 ...
- jdbc 与 each controller 对多条查询结果的处理
这里 userid 是从前面 sql语句中查到的其中一个字段的结果 这里设置变量的前缀,即使用userid进行循环,输出变量名称为 current_userid 假设另外一个变量的名字为mobile, ...
- java 24 - 8 GUI之创建四则运算计算器(未校验版)
这个是用NetBeans软件制作的,因为这个软件制作GUI任务比较方便 通过拖拽控件生成的窗体:(红色的名称是更改后的控件名称) 拉拽好布局后,要进行的步骤: A:更改想要进行操作的控件的名称(右键控 ...
- androidSDK无法更新的解决方法之一
方法来源于: http://www.eoeandroid.com/thread-281075-1-1.html 试试这个,能解决国内访问Google服务器的困难启动 Android SDK Manag ...
- poj3281 Dining
Dining Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14316 Accepted: 6491 Descripti ...
- C#将JSON字符串对象序列化与反序列化
C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = new List<Product& ...
- python处理经过gzip压缩的网页内容
Python在进行网页抓取时,有时会获取到经过gzip压缩后的数据(体积小,传输快),导致无法阅读和使用. 如图所示,为http原始报文.可以看到,header区域的“Content-Encoding ...
- P3398 仓鼠找sugar
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- Linux socket多进程服务器框架二
客户端未解决Bug:子进程或者父进程退出的时候,我无法做到两个进程都调用clt_socket_Destory()方式释放socket句柄, 但是进程退出后,相应的资源也会释放,有一定影响,但是不大,以 ...
- SQL Server 用SSMS查看依赖关系有时候不准确,改用代码查
SQL Server 用SSMS查看依赖关系有时候不准确,明明某个sp中有用到表tohen,查看表tohen的依赖关系的时候,却看不到这个sp 用代码查看方式如下: --依赖于表tohen的对象 SE ...