Paratroopers

Time Limit: 1000MS Memory Limit: 65536K

Total Submissions: 7881 Accepted: 2373

Description

It is year 2500 A.D. and there is a terrible war between the forces of the Earth and the Mars. Recently, the commanders of the Earth are informed by their spies that the invaders of Mars want to land some paratroopers in the m × n grid yard of one their main weapon factories in order to destroy it. In addition, the spies informed them the row and column of the places in the yard in which each paratrooper will land. Since the paratroopers are very strong and well-organized, even one of them, if survived, can complete the mission and destroy the whole factory. As a result, the defense force of the Earth must kill all of them simultaneously after their landing.

In order to accomplish this task, the defense force wants to utilize some of their most hi-tech laser guns. They can install a gun on a row (resp. column) and by firing this gun all paratroopers landed in this row (resp. column) will die. The cost of installing a gun in the ith row (resp. column) of the grid yard is ri (resp. ci ) and the total cost of constructing a system firing all guns simultaneously is equal to the product of their costs. Now, your team as a high rank defense group must select the guns that can kill all paratroopers and yield minimum total cost of constructing the firing system.

Input

Input begins with a number T showing the number of test cases and then, T test cases follow. Each test case begins with a line containing three integers 1 ≤ m ≤ 50 , 1 ≤ n ≤ 50 and 1 ≤ l ≤ 500 showing the number of rows and columns of the yard and the number of paratroopers respectively. After that, a line with m positive real numbers greater or equal to 1.0 comes where the ith number is ri and then, a line with n positive real numbers greater or equal to 1.0 comes where the ith number is ci. Finally, l lines come each containing the row and column of a paratrooper.

Output

For each test case, your program must output the minimum total cost of constructing the firing system rounded to four digits after the fraction point.

Sample Input

1

4 4 5

2.0 7.0 5.0 2.0

1.5 2.0 2.0 8.0

1 1

2 2

3 3

4 4

1 4

Sample Output

16.0000

Source

Amirkabir University of Technology Local Contest 2006

好恶心的题啊,一直超时,后来也没有怎么改经过一大波的TLE后就过了,好奇怪,难道精度没有控制好?

#include <map>
#include <cmath>
#include <queue>
#include <stack>
#include <string>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std; const double INF = 10000.0; const double eps = 1e-8; const int Max = 3000; struct Edge
{
int v;
int next;
double cap;
}E[Max]; int Head[120];
int Du[120];
int top;
int n,m,L;
int s,t;
void AddEdge(int u,int v,double w)
{
E[top].cap=w;E[top].v=v;
E[top].next=Head[u];Head[u]=top++;
E[top].cap=0;E[top].v=u;
E[top].next=Head[v];Head[v]=top++;
}
double Eps(double s)
{
return fabs(s)<eps?0:s;
}
double min(double a,double b)
{
return a<b?a:b;
}
int bfs()
{
memset(Du,0,sizeof(Du));
queue<int>Q;
Du[s]=1;
Q.push(s);
while(!Q.empty())
{
int a=Q.front();
Q.pop();
for(int i=Head[a];i!=-1;i=E[i].next)
{
if(Du[E[i].v]==0&&Eps(E[i].cap)>0)
{
Du[E[i].v]=Du[a]+1;
Q.push(E[i].v);
}
}
}
return Du[t];
} double dfs(int star,double num)
{ if(star==t)
{
return num;
}
double S=0;
double ant;
for(int i=Head[star];i!=-1;i=E[i].next)
{
if(Du[star]+1==Du[E[i].v]&&Eps(E[i].cap)>0)
{
ant=dfs(E[i].v,min(E[i].cap,num));
E[i].cap-=ant;
E[i^1].cap+=ant;
num-=ant;
S+=ant;
if(Eps(num)==0)
{
break;
}
}
}
return S;
}
double Dinic()
{
double ant=0;
while(bfs())
{
ant+=dfs(0,INF);
}
return ant;
} int main()
{
int T;
double w;
int u,v;
scanf("%d",&T);
while(T--)
{
scanf("%d %d %d",&n,&m,&L);
s=0;
t=n+m+1;
top=0;
memset(Head,-1,sizeof(Head));
for(int i=1;i<=n;i++)
{
scanf("%lf",&w);
AddEdge(s,i,log(w));
}
for(int i=1;i<=m;i++)
{
scanf("%lf",&w);
AddEdge(n+i,t,log(w));
}
for(int i=1;i<=L;i++)
{
scanf("%d %d",&u,&v);
AddEdge(u,v+n,INF);
}
printf("%.4f\n",exp(Dinic()));
}
return 0;
}

Paratroopers的更多相关文章

  1. POJ3308 Paratroopers(网络流)(最小割)

                                                     Paratroopers Time Limit: 1000MS   Memory Limit: 655 ...

  2. 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 ...

  3. 伞兵(Paratroopers)

    伞兵(Paratroopers) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 公元 2500 年,地球和火星之间爆发了一场战争.最近,地球军队指挥官获悉火星入侵者将派一些伞兵来摧毁地 ...

  4. POJ 3308 Paratroopers 最大流,乘积化和 难度:2

    Paratroopers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7267   Accepted: 2194 Desc ...

  5. POJ 3308 Paratroopers(最小点权覆盖)(对数乘转加)

    http://poj.org/problem?id=3308 r*c的地图 每一个大炮可以消灭一行一列的敌人 安装消灭第i行的大炮花费是ri 安装消灭第j行的大炮花费是ci 已知敌人坐标,同时消灭所有 ...

  6. POJ 3308 Paratroopers(最大流最小割の最小点权覆盖)

    Description It is year 2500 A.D. and there is a terrible war between the forces of the Earth and the ...

  7. poj3308 Paratroopers

    Description It is year 2500 A.D. and there is a terrible war between the forces of the Earth and the ...

  8. poj 3308 Paratroopers(二分图最小点权覆盖)

    Paratroopers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8954   Accepted: 2702 Desc ...

  9. POJ - 3308 Paratroopers(最大流)

    1.这道题学了个单词,product 还有 乘积 的意思.. 题意就是在一个 m*n的矩阵中,放入L个敌军的伞兵,而我军要在伞兵落地的瞬间将其消灭.现在我军用一种激光枪组建一个防御系统,这种枪可以安装 ...

随机推荐

  1. 解决Ueditor 不兼容IE7 和IE8

    引用Ueditor的js 的时候用 绝对路径

  2. php js表单登陆验证

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. SQL Server面试题

    前几天在博客园上看到一道SQL面试题,sc是表名.老师拿来与同学分享,让大家试做,要求是:查出每科成绩都>=80分的名字,看能写出几种方法.没有主外键,没有关联,脑袋一下子就蒙了.经老师讲解指导 ...

  4. springday03-go2

    新建springmvc01项目1.创建项目,导入jar包 拷贝jar/spring/first下的五个spring的jar包,以及jar/spring/mvc下的两个mvcjar包放在lib下 2.创 ...

  5. CSS_03_04_CSS伪元素选择器

    第01步:编写css代码:wei.css @charset "utf-8"; /* 伪元素选择器 :状态 效果顺序:L V H A */ a:link.lin_01{/*超链接,未 ...

  6. 关于Linux系统basename函数缺陷的思考

    某模块作为前台进程独立运行时,运行命令携带命令行参数:作为某平台下守护进程子进程运行时,需要将命令行参数固化在代码里.类似如下写法: char *argv[] = {"./DslDriver ...

  7. 16---Net基础加强

    更新中,敬请期待............ Xml介绍 xml读写练习 xml练习1 xml练习2

  8. oracle索引使用时注意

    1.使用不等于操作符(<>, !=)下面这种情况,即使在列dept_id有一个索引,查询语句仍然执行一次全表扫描 select * from dept where staff_num &l ...

  9. 【py技巧】使用reload重导入修改过的包或模块

    #使用import导入 import my_module my_module.something() #out - orignal #这里修改输出 - changed reload(my_module ...

  10. SqlServer:此数据库处于单用户模式,导致数据库无法删除的处理

    此数据库处理单用户模式,尚在连接当中,无法删除(既使将SQLServer停止后再启动也是如此) USE [master] GO /****** Object: StoredProcedure [dbo ...