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) { ...
随机推荐
- Composer 很重要很重要 内核 原理
话题先攒着,过来再来写 先来一张原理图 composer的原理和其他的包管理工具都是一样的,只是实现的细节有些不同,例如yum,例如brew,例如apt-get还有packets. 使用自己的comp ...
- 黑马day01 笔记
一.xml语法 1.文档声明 用来声明xml的基本属性,用来指挥解析引擎怎样去解析当前xml 通常一个xml都要包括而且仅仅能包括一个文档声明 xml的文档必须在整个xml ...
- ios swift学习日记4-字符串和字符
近期ios的swift语言好像火了起来,本人没有objectc的基础,但之前是有c跟java的基础的. 从这几天開始学习ios的swift语言,后期以博客形式公布.这里提供一本翻译的英文版的swif书 ...
- C# 开放式并发冲突报错处理
1.调用DataSet.GetChanges()获取数据源中改变的数据 var data = ViewData.GetChanges() as ReleaseData; 2.为新增的数据 data 加 ...
- ROS-launch文件标签解读
前言:ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file).事实上,在ROS功能包中,启动文件的使用是非常普遍的.任何包含两个或两个以上节点的系 ...
- Super超级ERP系统---(1)总体设计
1.概述 随着互联网的发展,尤其是电子商务的发展,信息化系统越来显得越重要.在互联网飞速发展的今天,各种网站,软件系统应用而生,特别是随着近几年电子商务的发展,很多企业慢慢开始做大,管理方面暴露 ...
- RocketMQ之基本信息
1.Producer 即消息生产者,负责产生消息,一般由业务系统负责产生消息. 2.Consumer 即消息消费者,负责消费消息,一般是后台系统负责异步消费. 3.Push Consumer Cons ...
- Vue.js 2 vs Vue.js 3的实现 – 云栖社区
Vue.js 2 vs Vue.js 3的实现 – 云栖社区 vue.js核心团队已经讨论过将在Vue3实现的变化.虽然API不会改变,但是数据响应机制(译者注:对数据改变的监听和通知)发生了变化.这 ...
- PHP入门及服务环境配置(Nginx+PHP)
PHP入门及服务环境配置(Nginx+PHP) PHP入门 PHP维基百科: PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一 ...
- 杭电 1040 As Easy As A+B 【排序】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1040 解题思路:数据不大,可以直接用冒泡排序 #include<stdio.h> int ...