BZOJ2542: [Ctsc2001]终极情报网
题解:
乘积最小只需要取对数。然后反向边就变成1/c,而不是-c了。
精度问题搞得我已经我想说什么了。。。
贴一份网上的pascal
代码;
- type ss=record
- x,y,c,r,next:longint;
- f:extended;
- end;
- const maxn=; maxm=; qu=; oo=maxlongint shr ;
- var i,j,n,cnt,st,ed,w,tot,t1,t2,t4,k,t,h,flow,augo,hh,tt:longint;
- pr:string;
- s,x:array[..maxn] of extended;
- y,pre,b:array[..maxn] of longint;
- f:array[..maxn] of boolean;
- e:array[..maxm] of ss;
- q:array[..qu] of longint;
- ans,t3,cost:extended;
- procedure jia(x,y,c:longint;f:extended);
- begin
- inc(tot); e[tot].x:=x; e[tot].y:=y; e[tot].c:=c; e[tot].f:=f;
- e[tot].next:=b[x]; b[x]:=tot;
- inc(tot); e[tot].x:=y; e[tot].y:=x; e[tot].f:=-f;
- e[tot].next:=b[y]; b[y]:=tot;
- e[tot].r:=tot-; e[tot-].r:=tot;
- end;
- begin
- readln(n,k);
- for i:= to n do read(x[i]);
- for i:= to n do read(y[i]);
- st:=n+; ed:=n+; cnt:=n+; fillchar(b,sizeof(b),);
- jia(st,cnt,k,);
- for i:= to n do
- if y[i]> then jia(cnt,i,y[i],-ln(x[i]));
- for i:= to n do
- begin
- read(t);
- if t= then jia(i,ed,oo,);
- end;
- while true do
- begin
- read(t1,t2);
- if t1=- then break;
- readln(t3,t4);
- jia(t1,t2,t4,-ln(t3));
- jia(t2,t1,t4,-ln(t3));
- end;
- ans:=;
- while true do
- begin
- for i:= to cnt do s[i]:=oo;
- h:=; t:=; q[]:=st; s[st]:=; hh:=; tt:=;
- repeat
- w:=q[h]; f[w]:=false; i:=b[w];
- inc(h); inc(hh); h:=h mod qu;
- while i<>- do
- begin
- if (s[e[i].y]-s[w]-e[i].f>1e-12) and (e[i].c>) then
- begin
- s[e[i].y]:=s[w]+e[i].f;
- pre[e[i].y]:=i;
- if not(f[e[i].y]) then
- if s[e[i].y]<s[q[h]] then
- begin
- dec(h); dec(hh);
- if h< then h:=qu-;
- q[h]:=e[i].y;
- end
- else
- begin
- inc(t); inc(tt);
- t:=t mod qu;
- q[t]:=e[i].y;
- end;
- f[e[i].y]:=true;
- end;
- i:=e[i].next;
- end;
- until hh>tt;
- if s[ed]=oo then break;
- flow:=maxlongint;
- i:=pre[ed];
- while i<> do
- begin
- if flow>e[i].c then flow:=e[i].c;
- i:=pre[e[i].x];
- end;
- i:=pre[ed]; cost:=;
- while i<> do
- begin
- cost:=e[i].f+cost; dec(e[i].c,flow);
- inc(e[e[i].r].c,flow); i:=pre[e[i].x];
- end;
- for i:= to flow do ans:=ans*exp(-cost);
- inc(augo,flow);
- end;
- if augo<k then writeln() else
- begin
- write('0.'); ans:=ans*;
- while ans< do
- begin
- ans:=ans*;
- write();
- end;
- for i:= to do ans:=ans*;
- for i:= to do ans:=round(ans/);
- writeln(trunc(ans));
- end;
- end.
2542: [Ctsc2001]终极情报网
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 211 Solved: 85
[Submit][Status]
Description
在最后的诺曼底登陆战开始之前,盟军与德军的情报部门围绕着最终的登陆地点展开了一场规模空前的情报战。
这场情报战中,盟军的战术是利用那些潜伏在敌军内部的双重间谍,将假的登陆消息发布给敌军的情报机关的负责人。那些已经潜入敌后的间谍们都是盟军情报部的精英,忠实可靠;但是如何选择合适的人选,以及最佳的消息传递方法,才能保证假消息能够尽快而且安全准确地传递到德军指挥官们的耳朵里,成了困扰盟军情报部长的最大问题。他需要你的帮助。
以下是情报部长提供的作战资料:
在敌后一共潜伏着我方最优秀的N名间谍,分别用数字1, 2, …, N编号。在给定的作战时间内,任意两人之间至多只进行一次点对点的双人联系。
我将给你一份表格,表格中将提供任意两位间谍i和j之间进行联系的安全程度,用一个 [0, 1] 的实数Si j表示;以及他们这次联系时,能够互相传递的消息的最大数目,用一个正整数表示Mi j (如果在表格中没有被提及,那么间谍i和j之间不进行直接联系)。
假消息从盟军总部传递到每个间谍手里的渠道也不是绝对安全,我们用 [0, 1] 的实数ASj表示总部与间谍j之间进行联系的安全程度,AMj则表示总部和间谍j之间进行联系时传递的消息的最大数目。对于不和总部直接联系的间谍,他的AMj=0(而表格中给出的他的ASj是没有意义的)。
当然,假消息从间谍手中交到敌军的情报部官员的办公桌上的过程是绝对安全的,也即是说,间谍与敌军情报部门之间要么不进行直接联系,要么其联系的安全程度是1(即完全可靠)。
现在情报部打算把K条假消息“透露”到德军那里。消息先由总部一次性发给N名间谍中的一些人,再通过他们之间的情报网传播,最终由这N名间谍中的某些将情报送到德军手中。
对于一条消息,只有安全的通过了所有的中转过程到达敌军情报部,这个传递消息的过程才算是安全的;因此根据乘法原理,它的安全程度P就是从总部出发,经多次传递直到到达德军那里,每一次传递该消息的安全程度的乘积。
而对于整个计划而言,只有当N条消息都安全的通过情报网到达德军手中,没有一条引起怀疑时,才算是成功的。所以计划的可靠程度是所有消息的安全程度的乘积。
显然,计划的可靠性取决于这些消息在情报网中的传递方法。
我需要一个方案,确定消息应该从哪些人手中传递到哪些人手中,使得最终计划的可靠性最大。
你可以利用计算机,来求得这个最可靠的消息传递方案。
Input
第一行包括两个整数N和K,分别是间谍的总人数和计划包含的消息总数。
第二行包括2N个数,前N个数是实数AS1, AS2, …, ASN(范围在[0, 1]以内);后N个数是整数AM1, AM1, …, AMN。
第三行包含了N个整数,其中第i(i = 1, 2, …, N)个整数如果为0表示间谍i与德军情报部不进行联系,如果为1则表示间谍与德军情报部进行联系。
第四行开始,每行包括4个数,依次分别是:代表间谍编号的正整数i和j,间谍i和j联系的安全性参数Si j([0,1]范围内的实数),以及i、j之间传递的最大消息数 Mi j(每一行的i均小于j )。
最后的一行包含两个整数-1 -1,表示输入数据的结束。
0
Output
只有一行。这一行中包含一个实数P,给出的是整个计划的可靠程度P,保留5位有效数字(四舍五入)。
如果情报网根本不能将K条消息传到德军手中,那么计划的可靠性为0。
(你可以假定,如果计划存在,那么它的可靠性大于1e-12)
Sample Input
0.9 0.7 0.8 0 0 0 2 6 8 0 0 0
0 0 0 1 0 1
1 4 0.5 2
2 3 0.9 5
2 5 0.8 2
2 6 0.8 7
3 5 0.8 2
5 6 0.8 4
-1 -1
Sample Output
BZOJ2542: [Ctsc2001]终极情报网的更多相关文章
- 图论(网络流):[CTSC2001]终极情报网
[CTSC2001]终极情报网 [题目描述] 在最后的诺曼底登陆战开始之前,盟军与德军的情报部门围绕着最终的登陆地点展开了一场规模空前的情报战. 这场情报战中,盟军的战术是利用那些潜伏在敌军内部的双重 ...
- bzoj 2542: [Ctsc2001]终极情报网 费用流
题目链接 2542: [Ctsc2001]终极情报网 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 321 Solved: 125[Submit][S ...
- 题解 洛谷 P5814 【[CTSC2001]终极情报网】
读完题后不难看出本题是个网络流模型,源点流出的总流量为\(k\),源点向每个和总部直接联系的间谍连边,每个间谍向其能传递的间谍连容量为\(m\)的边,能与德军情报部进行联系的间谍向汇点连容量为\(in ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Soj题目分类
-----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...
- const extern static 终极指南
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
- ie6 ie7 ie8 ie9兼容问题终极解决方案
放下包袱,解决低版本兼容问题 这是一个老生常谈的问题,自然解决这个问题的方案也比较多,下面整理了一些解决方法: 1.强制使用高版本渲染模式. 强制使用Edge模式来解析网页代码 <meta ...
- Python导出Excel为Lua/Json/Xml实例教程(三):终极需求
相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 Python导出E ...
- JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
转:http://www.codeceo.com/article/javascript-pinyin.html 前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的 ...
随机推荐
- Android UI学习1:控件和基本事件的响应
在任何一个 GUI 系统中,控制界面上的控件(通常称为控件)都是一个基本的内容.对于 Android 应用程序,控件称为 View. 在 Android 中,在处理 UI 中的各种元素的时候,两个程序 ...
- 1054. The Dominant Color (20)
时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Behind the scenes in the compute ...
- 懒惰的JY--关于遍历
先上题: [问题描述] 众所周知,JY的百度搜索算法已经练的炉火纯青,任何搜索题都能0.000ms出解. 不幸的是,JY遇到了一道百度搜索算法解决不了的题目,题目是这样的: 给定N个数A[1] A[2 ...
- Android水平(横向)翻页列表,类似水平GridVIew
Android水平(横向)翻页列表,类似于水平方向的GridView,行列自定义,但要翻页切换,考虑加载性能,当Item数据很多时加载和翻页要流畅,翻页时要有动画效果,效果图如下: 实现方式: 1:翻 ...
- 微软职位内部推荐-Sr Development Lead-OSG-IPX
微软近期Open的职位: Job Summary:Be part of Microsoft's strategy to deliver a great input experience across ...
- 简单3d RPG游戏 之 005 选择敌人
选择一个敌人,按ctrl+d,复制出3个,调整一下它们的位置,不重叠,修改Tag为Enemy,禁用EnemyAI. 创建Targetting脚本,绑定到Player玩家对象 public class ...
- mysql 连接多行 合并多行
group_concat() select group_concat(id) from xxxx -------------------------------------------- id1,id ...
- 基于注解风格的Spring-MVC的拦截器
基于注解风格的Spring-MVC的拦截器 Spring-MVC如何使用拦截器,官方文档只给出了非注解风格的例子.那么基于注解风格如何使用拦截器呢? 基于注解基本上有2个可使用的定义类,分别是Defa ...
- MySQL 主主同步配置和主从配置步骤
★预备知识 : 1.双机热备 对于双机热备这一概念,我搜索了很多资料,最后,还是按照大多数资料所讲分成广义与狭义两种意义来说. 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服 ...
- 优化SQL Server数据库查询方法
SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列 ...