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. mysql 查看是否存在某一张表

    判断表是否存在 SELECT table_name FROM information_schema.TABLES WHERE table_name ='yourname'; 或者 SHOW TABLE ...

  2. UIBarButtonItem变弹簧

    UIBarButtonItem * spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystem ...

  3. C++Primer 第十六章

    //1.模板定义以关键字template开始,后跟一个模板参数列表,此列表不能为空.编译器用推断出的模板参数来实例化一个特定版本的函数.类型参数前必须使用class或者typename(推荐使用typ ...

  4. 一个新人对于JavaScript简单应用的理解

    JavaScript 1.输出:document.write("hello,world");    document.write的意思就是给我再此页面中显示出什么什么小括号里面的内 ...

  5. For嵌套输出图形

    /*输出此图形    *   * *  * * * * * * ** * * * *  * * * *   * * *   * *     *解析:可以把此图形看成两部分----*---* *--* ...

  6. (转)flexigrid 参数说明

    本文为转载 http://simple1024.iteye.com/blog/1171090 项目用到这玩意,像样的API都是英文的,英文不好,所以经过各种搜集,flexigrid就整理了这么多用得上 ...

  7. UML: 对象图

    摘自http://www.umlonline.org/school/thread-33-1-1.html Line表示类,line为Line的对象,下划线表明为对象,一般对象图用不到. 除了静态方法, ...

  8. 利用MyEclipes的反转工程来配置Hibernate各种配置

    首先需要有设计好的数据库,然后创建一个Web Project然后右键点击项目选择MyEclipse→add Hibernate Capabilities →→ →→,然后如果没有管理员的话需要在选择M ...

  9. 。。。Spring框架总结(一)。。。

    Spring框架已经学习了两遍了,第一遍基本上忘得差不多了,现在开始复习第二遍的,也复习的差不多了,比之前懂了很多东西,今天就写下来,记录一下我滴小成果! 首先,在Spring框架中有两个重要的概念: ...

  10. batch批的概念

    批处理(Batch Requests), 批处理简单理解为同时执行的一批SQL处理语句,一个批处理中可能有多个DML.多个存储过程等等.如在SSMS操作,每个'GO'执行前都属于一个批处理. 注意区分 ...