P4329 [COCI2006-2007#1] Bond
题意翻译
有n 个人去执行n 个任务,每个人执行每个任务有不同的成功率,每个人只能执行一个任务,求所有任务都执行的总的成功率。
输入第一行,一个整数n (1≤n≤20 ),表示人数兼任务数。接下来n 行每行n 个数,第i 行第j 个数表示第i 个人去执行第j 个任务的成功率(这是一个百分数,在0 到100 间)。
输出最大的总成功率(这应也是一个百分数)
题目描述
Everyone knows of the secret agent double-oh-seven, the popular Bond (James Bond). A lesser known fact is that he actually did not perform most of his missions by himself; they were instead done by his cousins, Jimmy Bonds. Bond (James Bond) has grown weary of having to distribute assign missions to Jimmy Bonds every time he gets new missions so he has asked you to help him out. Every month Bond (James Bond) receives a list of missions. Using his detailed intelligence from past missions, for every mission and for every Jimmy Bond he calculates the probability of that particular mission being successfully completed by that particular Jimmy Bond. Your program should process that data and find the arrangement that will result in the greatest probability that all missions are completed successfully. Note: the probability of all missions being completed successfully is equal to the product of the probabilities of the single missions being completed successfully.
输入输出格式
输入格式:
The first line will contain an integer N, the number of Jimmy
Bonds and missions (1 ≤ N ≤ 20).
The following N lines will contain N integers between 0 and 100,
inclusive. The j-th integer on the ith line is the probability that
Jimmy Bond i would successfully complete mission j, given as a
percentage.
输出格式:
Output the maximum probability of Jimmy Bonds successfully completing all the missions, as a percentage.
输入输出样例
2
100 100
50 50
50.000000
2
0 50
50 0
25.00000
3
25 60 100
13 0 50
12 70 90
9.10000
说明
Clarification of the third example: If Jimmy bond 1 is assigned the 3rd mission, Jimmy Bond 2 the 1st mission and Jimmy Bond 3 the 2nd mission the probability is: 1.0 0.13 0.7 = 0.091 = 9.1%. All other arrangements give a smaller probability of success. Note: Outputs within ±0.000001 of the official solution will be accepted.
Solution:
本题SB费用流,裸的没话讲咯。
读题后不难构建一个带权二分图的模型,于是KM啦,我们直接跑最大费用最大流,坑点在于直接累乘费用会爆精度(long double都炸了),一个巧妙的解决方法是建图时把费用设为$\ln c$,这样跑费用流就把乘法变为加法,最后只要输出$e^{cost_{max}}$就好了(注意特判$cost_{max}=0$的情况)。
代码:
/*Code by 520 -- 9.4*/
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define RE register
#define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a);(i)--)
using namespace std;
const int N=,inf=;
int s,t,n,maxf,h[N],to[N],net[N],w[N],cnt=,pre[N],maxn[N];
long double ans,dis[N],c[N];
bool vis[N]; il void add(int u,int v,int fl,double co){
to[++cnt]=v,net[cnt]=h[u],w[cnt]=fl,c[cnt]=co,h[u]=cnt;
to[++cnt]=u,net[cnt]=h[v],w[cnt]=,c[cnt]=-co,h[v]=cnt;
} il bool spfa(){
queue<int>q;
For(i,,t) dis[i]=-inf;
dis[s]=,q.push(s),maxn[s]=inf;
while(!q.empty()){
RE int u=q.front();q.pop();vis[u]=;
for(RE int i=h[u];i;i=net[i])
if(dis[to[i]]<dis[u]+c[i]&&w[i]){
dis[to[i]]=dis[u]+c[i],pre[to[i]]=i,
maxn[to[i]]=min(maxn[u],w[i]);
if(!vis[to[i]])vis[to[i]]=,q.push(to[i]);
}
}
return dis[t]!=-inf;
} il void update(){
int p=t;
while(p!=s){
RE int i=pre[p];
w[i]-=maxn[t],w[i^]+=maxn[t];
p=to[i^];
}
ans+=dis[t];
} int main(){
scanf("%d",&n),t=n<<|;
double x;
For(i,,n) For(j,,n) scanf("%lf",&x),add(i,j+n,,log(x/));
For(i,,n) add(s,i,,),add(i+n,t,,);
while(spfa())update();
printf("%.6Lf",(ans?exp(ans)*:));
return ;
}
P4329 [COCI2006-2007#1] Bond的更多相关文章
- 【刷题】洛谷 P4329 [COCI2006-2007#1] Bond
题意翻译 有 \(n\) 个人去执行 \(n\) 个任务,每个人执行每个任务有不同的成功率,每个人只能执行一个任务,求所有任务都执行的总的成功率. 输入第一行,一个整数 \(n\) ( \(1\leq ...
- [洛谷P4329][COCI2006-2007#1] Bond
题目大意:有$n$个人有$n$个任务,每个人执行每个任务有不同的成功率,每个人只能执行一个任务,求所有任务都执行的总的成功率. 题解:可以跑最大费用最大流,把成功率取个$log$,最后$exp$回去就 ...
- Configure a VLAN (on top of a bond) with NetworkManager (nmcli) in RHEL7
not on top of a bond Environment Red Hat Enterprise Linux 7 NetworkManager Issue Need an 802.1q VLAN ...
- poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算
/** * 版权所有(C) 2016 * @author www.xiongge.club * @date 2016-12-7 上午10:03:29 */ package xlsx; /** * @C ...
- BZOJ 2007: [Noi2010]海拔
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2410 Solved: 1142[Submit][Status] ...
- cnentos中进行bond网卡配置,一切配置无问题,就是ping不通宿主机
服务器网口绑定 1. ifcfg-bond0 DEVICE=bond0 ONBOOT=yes IPADDR=192.168.100.64 NETMASK=255.255.255.0 2. ...
- Microsoft开源跨平台的序列化库——Bond
上个月Microsoft开源了Bond,一个跨平台的模式化数据处理框架.Bond支持跨语言的序列化/反序列化,支持强大的泛型机制能够对数据进行有效地处理.该框架在Microsoft公司内部的高扩展服务 ...
- 开源WinForms界面开发框架Management Studio 选项卡文档 插件 Office 2007蓝色风格 后台线程
Management Studio是我在WinForms小项目开发过程中搭建起来的一个插件式结构的应用程序框架,因为简单灵活又容易扩展,现在将它开源供读者参考. 跑起来的效果图如下所示,具备选项卡式多 ...
- [转载]Linux Bond的原理及其不足
本文转自http://www.yunweipai.com/archives/1969.html 支持原创.尊重原创,分享知识! 在企业及电信Linux服务器环境上,网络配置都会使用Bonding技术做 ...
随机推荐
- 【DOS】COPY命令
一:文件复制COPY 指令说明:复制一个或更多文件到指定位置,可以合并文件 语法:COPY [/A/B] source[/A|/B] [+source [/A|/b] [+...]][destinat ...
- Eclipse的汉化问题
最近看了很多我周围的同学,也都是刚开始接触Eclipse,但是都头疼于eclipse的汉化问题. 好在的是,Eclipse的汉化比较简单,不用到网上自己下载汉化包,而且关于这个软件的汉化也非常的多,所 ...
- selenium的基本定位方式总结
Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css selector 这8种定位方 ...
- Vuejs 使用 lib 库模式打包 umd 解决 NPM 包发布的问题
由于升级了 v0.2 版 GearCase 使用打包工具从 parcel 更换成 vue-cli 3.x.因此打包后发布 NPM 包的方式与之前有很大的差异,这也导致了在发布完 GearCase v0 ...
- django orm 操作表
django orm 操作表 1.基本操作 增 models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs inser ...
- Python List Comprehension
(一)使用List Comprehension的好处 在了解Python的List Comprehension之前,我们习惯使用for循环创建列表,比如下面的例子: numbers = range(1 ...
- OO学习总结与体会
前言 经过了对于面向对象程序设计的一个月的学习,我初尝了JAVA以及面向对象程序的魅力.经历了三次难度逐渐加大的课后编程作业,我对于工程化面向对象编程以及调试有了深刻的认识与颇多感想.我写下本篇文章以 ...
- 自己对git的认识。
刚打开这个软件的网页,只能用一个字来形容,蒙,蒙,蒙,重要的事要说三遍,全英文的,这到底是什么东西,连注册都得慢慢翻译,这英语基础实在是太差劲了. 看了老师推荐的对Git使用介绍,由于之前对这个软件的 ...
- Java 反射 不定参数bug
遇到的第一个关于反射的bug:java.lang.IllegalArgumentException: wrong number of arguments的问题解析如下: 1.错误bug wrong n ...
- Teamwork(The fourth day of the team)
在这天我们已经开始去做自己手上的的任务.由于我们都忙于手头上的工作,所以这天我们就没有过多的交流,有的可能就是网上说一下实现到了哪里.