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) { ...
随机推荐
- 《从零開始学Swift》学习笔记(Day 56)—— Swift编码规范之命名规范
原创文章,欢迎转载.转载请注明:关东升的博客 程序代码中到处都是自定义的名字,取一个有样而且符合规范的名字非常重要. 命名方法非常多,可是比較有名的,广泛接受命名法有: 匈牙利命名,一般仅仅是命名变量 ...
- Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D【转】
本文转载自:http://blog.csdn.net/maopig/article/details/7230311 在源代码里面如果这样是定义的:#ifdef MACRONAME//可选代码#en ...
- 各种编程语言功能综合简要介绍(C,C++,JAVA,PHP,PYTHON,易语言)
各种编程语言功能综合简要介绍(C,C++,JAVA,PHP,PYTHON,易语言) 总结 a.一个语言或者一个东西能火是和这种语言进入某一子行业的契机有关.也就是说这个语言有没有解决社会急需的问题. ...
- hdoj--1045--Fire Net(二分图)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- poj--2553--The Bottom of a Graph (scc+缩点)
The Bottom of a Graph Time Limit : 6000/3000ms (Java/Other) Memory Limit : 131072/65536K (Java/Oth ...
- @synthesize和@dynamic区别
在声明property属性后,有2种实现选择 @synthesize 编译器期间,让编译器自动生成getter/setter方法. 当有自定义的存或取方法时,自定义会屏蔽自动生成该方法 @dynami ...
- guice基本使用,常用的绑定方式(四)
guice在moudle中提供了良好的绑定方法. 它提供了普通的绑定,自定义注解绑定,按名称绑定等. 下面直接看代码: package com.ming.user.test; import com.g ...
- Android 关于Toolbar和FragmentActivity的问题
今天在工作中遇到用Fragment搭Tab框架时,FragmentActivity无法使用Toolbar的问题.查了许多资料,其实AppComponent继承自FragmentActivity,所以A ...
- 集成Bmob推送
Write By lz: 转发请注明原文地址: http://www.cnblogs.com/lizhilin2016/p/6952217.html Lz 寄语: Bmob 奇葩推送, 大坑, 想要 ...
- hdu2647 Reward 拓扑排序
此题的关键在于分层次,最低一层的人的奖金是888,第二层是888+1 …… 分层可以这样实现.建立反向图.在拓扑排序的时候,第一批入度为0的点就处于第一层,第二批处于第二层 …… 由于是逐个遍历入度为 ...