网络流 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 ...
随机推荐
- AC日记——简单密码 openjudge 1.7 10
10:简单密码 总时间限制: 1000ms 内存限制: 65536kB 描述 Julius Caesar曾经使用过一种很简单的密码.对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这 ...
- date时间函数
时间函数: date();和time();的相互转换 time(); 在PHP中单位是秒,在js中是毫秒. microtime(); 毫秒 date('Y-m-d H:i:s',time()); ...
- J2EE中关于tomcat的maxIdle、maxActive、maxActive相关配置
一.基本概念 1 maxActive 连接池的最大数据库连接数.设为0表示无限制,一般把maxActive设置成可能的并发量就行了 2 maxIdle 最大的空闲连接数 3 maxWait 最大建立连 ...
- noip模拟赛(10.4) 字典序(dictionary)
[题目描述] 你需要构造一个1~n的排列,使得它满足m个条件,每个条件形如(ai,bi),表示ai必须在bi前面.在此基础上,你需要使它的字典序最小. [输入数据] 第一行两个正整数n,m.接下来m行 ...
- hdu 1166
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 修复垂直滑动RecyclerView嵌套水平滑动RecyclerView水平滑动不灵敏问题
在 Android 应用中,大部分情况下都会使用一个垂直滚动的 View 来显示内容(比如 ListView.RecyclerView 等).但是有时候你还希望垂直滚动的View 里面的内容可以水平滚 ...
- ie 7/8不支持trim的属性的解决方案
if(!('trim' in String.prototype)){ String.prototype.trim = function(){ return this.replace(/^[\s\uFE ...
- Use Cursor
declare : CURSOR cursor_name IS select_statement ; open : OPEN cursor_name if the query returns no r ...
- Yeo 17-ROI parcellation
Reference Buckner R L, Krienen F M, Castellanos A, et al. The organization of the human cerebellum e ...
- Regression analysis
Source: http://wenku.baidu.com/link?url=9KrZhWmkIDHrqNHiXCGfkJVQWGFKOzaeiB7SslSdW_JnXCkVHsHsXJyvGbDv ...