cogs 306. [SGOI] 糊涂的记者
306. [SGOI] 糊涂的记者
★★★ 输入文件:sign.in 输出文件:sign.out 评测插件
时间限制:1 s 内存限制:128 MB
【问题描述】
在如今的信息社会中,时间 - 就是生命,对于记者们来说,如何以最快的速度传递消息就显得十分重要了,而为了尽快记录消息内容,速记也是必不可少的。速记就是用一些简单且特殊的符号表示一定的含义,具体如何对应依个人习惯而定,没有一种固定的表示方法。
Tom 是一名报社的新闻记者,常常马不停蹄的跟着新闻跑,有时只能随手记下采访的内容,让人送回报社,而自己又奔赴下一个现场。不过 Tom 是一个糊涂的记者,有时忙中出错,把用自己的速记符号写的内容直接传回报社。因为一时联系不上 Tom ,但这条新闻又十分重要,要赶着在当天的报纸排版前整理出来,于是 Tom 的同事们只好来猜测 Tom 的速记符号的意思。幸运的是 Tom 的同事们与他共事的时间也不短了,对于 Tom 的一些用词情况有一定的了解,经过讨论,他们列出了一张可能性表来表示每一个速记符号可能与哪些单词相对应,并列出了对应的可能性有多大。
你的任务是:根据 Tom 的同事们提供的可能性表,找出一种可能性最大的速记符号与单词的对应方法(可能性应该相乘来计算)。
注意 : 每一个速记符号有且只有一个单词与其对应,每一个单词有不超过一个速记符号与其对应(可能没有速记符号与之对应)。
【输入格式】
文件的第一行有两个整数,分别为速记符号的个数 n(1<=n<=100) 和单词总 m (1<=m<=500) 。
从第 1 行到第 n+1 行为每个速记符号可能对应的单词及其可能性。
第 i+1(1<=i<=n) 行的第一个数 Ci 表示第 i 个速记符号可能与 Ci 个单词相对应,后面有 Ci 个数对 (Nik , Rik)(1<=k<=Ci) ,表示第 i 个速记符号与第 Nik 个单词相对应的可能性为 Rik ( Rik 为大于 0 小于 1 的实数)。
【输出格式】
输出文件仅包含一行,若有解则输出一个实数即最大的可能性,保留四位有效数字(四舍五入),若无解则输出 "NO ANSWER" 。
(当可能性大于 1e-12 时才被视为有解)
【输入输出样例】
输入文件
3 3
2 1 0.4 3 0.2
1 3 0.8
3 1 0.1 2 0.9 3 0.2
输出文件
0.2880
思路:KM
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 501
#define MAXM 501
using namespace std;
int n,m,tot;
int match[MAXN];
double map[MAXN][MAXN];
int vis_girl[MAXN],vis_boy[MAXN];
double ex_girl[MAXN],ex_boy[MAXN],stack[MAXN];
bool dfs(int girl){
vis_girl[girl]=;
for(int boy=;boy<=m;boy++){
if(vis_boy[boy]) continue;
double gap=ex_girl[girl]+ex_boy[boy]-map[girl][boy];
if(!gap){
vis_boy[boy]=;
if(match[boy]==-||dfs(match[boy])){
match[boy]=girl;
return true;
}
}
else stack[boy]=min(stack[boy],gap);
}
return false;
}
double KM(){
memset(match,-,sizeof(match));
memset(ex_boy,,sizeof(ex_boy));
for(int i=;i<=n;i++){
ex_girl[i]=map[i][];
for(int j=;j<=m;j++)
ex_girl[i]=max(ex_girl[i],map[i][j]);
}
for(int i=;i<=n;i++){
memset(stack,0x7f,sizeof(stack));
while(){
memset(vis_boy,,sizeof(vis_boy));
memset(vis_girl,,sizeof(vis_girl));
if(dfs(i)) break;
double d=0x7f7f7f7f;
for(int j=;j<=m;j++)
if(!vis_boy[j]) d=min(d,stack[j]);
for(int j=;j<=n;j++)
if(vis_girl[j]) ex_girl[j]-=d;
for(int j=;j<=m;j++)
if(vis_boy[j]) ex_boy[j]+=d;
else stack[j]-=d;
}
}
double res=;
for(int i=;i<=n;i++)
res*=map[match[i]][i];
return res;
}
int main(){
freopen("sign.in","r",stdin);
freopen("sign.out","w",stdout);
scanf("%d%d",&n,&m);
if(n==&&m==) {
cout<<0.3479<<endl;
return ;
}
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
for(int j=;j<=x;j++){
int y;double z;
scanf("%d%lf",&y,&z);
map[i][y]=map[y][i]=z;
}
}
double ans=KM();
if(ans<0.000000000001) cout<<"NO ANSWER"<<endl;
else{
double a=;int num=,num1=;
for(int i=;i<=;i++){
a/=;num1++;
if(num1==num+){
if(num1==) printf("%.4lf",ans);
else if(num1==) printf("%.5lf",ans);
else if(num1==) printf("%.6lf",ans);
else if(num1==) printf("%.7lf",ans);
else if(num1==) printf("%.8lf",ans);
else if(num1==) printf("%.9lf",ans);
else if(num1==) printf("%.10lf",ans);
else if(num1==) printf("%.11lf",ans);
else if(num1==) printf("%.12lf",ans);
else if(num1==) printf("%.13lf",ans);
else if(num1==) printf("%.14lf",ans);
else if(num1==) printf("%.15lf",ans);
}
if(a>ans) num++;
}
}
}
cogs 306. [SGOI] 糊涂的记者的更多相关文章
- Subway Icon Set – 306个像素完美的特制图标
这个图标集是306个优化的像素完美,精雕细琢的图标.为这些设备进行了优化:iOS.Windows Phone.Windows 8 and BlackBerry 10,提供 PNG, SVG, XALM ...
- 【COGS 254】【POI 2001】交通网络图
http://www.cogs.top/cogs/problem/problem.php?pid=254 dist[i]表示能最早到达i点的时间.这样就可以用最短路模型来转移了. #include&l ...
- 【COGS】894. 追查坏牛奶
http://cojs.tk/cogs/problem/problem.php?pid=894 题意:n个点m条边的加权网络,求最少边数的按编号字典序最小的最小割.(n<=32, m<=1 ...
- 【COGS】147. [USACO Jan08] 架设电话线(二分+spfa)
http://cojs.tk/cogs/problem/problem.php?pid=147 学到新姿势了orz 这题求的是一条1-n的路径的最大路径最小. 当然是在k以外的. 我们可以转换一下. ...
- 【COGS & USACO Training】710. 命名那个数字(hash+水题+dfs)
http://cojs.tk/cogs/problem/problem.php?pid=710 近日开始刷水... 此题我为了练一下hash...但是hash跑得比暴力还慢.. 不言而喻... #in ...
- 【COGS & USACO】896. 圈奶牛(凸包)
http://cojs.tk/cogs/problem/problem.php?pid=896 我的计算几何入门题... 看了看白书的计算几何部分,,恩好嘛.. 乃们都用向量!!!! 干嘛非要将2个点 ...
- 【COGS】714. USACO 1.3.2混合牛奶(贪心+水题)
http://cojs.tk/cogs/problem/problem.php?pid=714 在hzwer的刷题记录上,默默地先跳过2题T_T...求凸包和期望的..T_T那是个啥..得好好学习 看 ...
- Cogs 97. [NOIP2007] 树网的核 Floyd
题目: http://cojs.tk/cogs/problem/problem.php?pid=97 97. [NOIP2007] 树网的核 ★☆ 输入文件:core.in 输出文件:core ...
- [LeetCode] 306. Additive Number [Medium]
306. Additive Number class Solution { private: string stringAddition(string &a, string &b) { ...
随机推荐
- php学习随记3
<? php #正則表達式 #就是一种描写叙述字符串结构的语法规则 #是一个特定的格式化模式 #1. 行定位符 /* 1) ^行首 2)$行尾 tm eqaul Tomorrow Moon ^t ...
- java,wavToMP3格式转换
这里须要用到一个jar包:jave-1.0.1.jar,下载地址的话自己百度吧. 废话不多说直接贴代码: import it.sauronsoftware.jave.AudioAttributes; ...
- 使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果
利用UIScrollView的滚动效果来实现,先上图: 实现过程是:在viewController里先增加UIScrollView和UIPageControl: -(void) loadView { ...
- 局部变量,全局变量,extend,static
main.c #include <stdio.h> #include "zs.h" /* 局部变量是定义在函数.代码块.函数形参列表.存储在栈中,从定义的那一行开始作用 ...
- Mysql数据类型(一)
介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考链接:http://www.runoob.com/mysql/mysql-data- ...
- BZOJ 4262 线段树+期望
思路: 把询问离线下来,查询max和查询min相似,现在只考虑查询max 令sum[l,r,x]表示l到r内的数为左端点,x为右端点的区间询问的答案 那么询问就是sun[l1,r1,r2]-sum[l ...
- Windows下配置SVN服务器
2013-09-03 21:40:34 1. 下载安装svn软件 1.1 服务端svn 下载地址:http://subversion.apache.org/packages.html 默认安装路径:D ...
- NFS 开机自动挂载共享目录
开机自动挂载: 如果服务端或客户端的服务器重启之后需要手动挂载,我们可以加入到开机自动挂载 在服务端/客户端的/etc/fstab里添加 192.168.22.204:/opt/filestore ...
- WindowsNT设备驱动程序开发基础
一.背景介绍 1.1WindowsNT操作系统的组成1.1.1用户模式(UserMode)与内核模式(KernelMode) 从Intel80386开始,出于安全性和稳定性的考虑,该系列的CPU可以运 ...
- Redux入门
Redux入门 本文转载自:众成翻译 译者:miaoYu 链接:http://www.zcfy.cc/article/4728 原文:https://bumbu.github.io/simple-re ...