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] 糊涂的记者的更多相关文章

  1. Subway Icon Set – 306个像素完美的特制图标

    这个图标集是306个优化的像素完美,精雕细琢的图标.为这些设备进行了优化:iOS.Windows Phone.Windows 8 and BlackBerry 10,提供 PNG, SVG, XALM ...

  2. 【COGS 254】【POI 2001】交通网络图

    http://www.cogs.top/cogs/problem/problem.php?pid=254 dist[i]表示能最早到达i点的时间.这样就可以用最短路模型来转移了. #include&l ...

  3. 【COGS】894. 追查坏牛奶

    http://cojs.tk/cogs/problem/problem.php?pid=894 题意:n个点m条边的加权网络,求最少边数的按编号字典序最小的最小割.(n<=32, m<=1 ...

  4. 【COGS】147. [USACO Jan08] 架设电话线(二分+spfa)

    http://cojs.tk/cogs/problem/problem.php?pid=147 学到新姿势了orz 这题求的是一条1-n的路径的最大路径最小. 当然是在k以外的. 我们可以转换一下. ...

  5. 【COGS & USACO Training】710. 命名那个数字(hash+水题+dfs)

    http://cojs.tk/cogs/problem/problem.php?pid=710 近日开始刷水... 此题我为了练一下hash...但是hash跑得比暴力还慢.. 不言而喻... #in ...

  6. 【COGS & USACO】896. 圈奶牛(凸包)

    http://cojs.tk/cogs/problem/problem.php?pid=896 我的计算几何入门题... 看了看白书的计算几何部分,,恩好嘛.. 乃们都用向量!!!! 干嘛非要将2个点 ...

  7. 【COGS】714. USACO 1.3.2混合牛奶(贪心+水题)

    http://cojs.tk/cogs/problem/problem.php?pid=714 在hzwer的刷题记录上,默默地先跳过2题T_T...求凸包和期望的..T_T那是个啥..得好好学习 看 ...

  8. Cogs 97. [NOIP2007] 树网的核 Floyd

    题目: http://cojs.tk/cogs/problem/problem.php?pid=97 97. [NOIP2007] 树网的核 ★☆   输入文件:core.in   输出文件:core ...

  9. [LeetCode] 306. Additive Number [Medium]

    306. Additive Number class Solution { private: string stringAddition(string &a, string &b) { ...

随机推荐

  1. 公司须要内部的地图服务,准备自己去开发可是成本太高,如今有没有专门为企业提供GIS地图开发的产品呀?大概价格多少?

    公司须要内部的地图服务,准备自己去开发可是成本太高,如今有没有专门为企业提供GIS地图开发的产品呀?大概价格多少?

  2. Android与JS互相调用以及注意

    近期项目中常常使用Html5而Android与JS调用常常会用到,这里记录一下,測试系统5.0以上. 这里先贴一下源代码 Activity: package jwzhangjie.com.webvie ...

  3. vim设置为indent折叠以后,每次打开文件时代码处于折叠状态,能改变吗?

    vim设置为indent折叠以后,每次打开文件时代码处于折叠状态.即使这次编辑的时候把折叠展开,保存关闭文件,重新打开,所有的代码都又折叠起来了. 请问有没有默认不折叠的方法? 是否有可以一次展开所有 ...

  4. The current .NET SDK does not support targeting .NET Core 2.1. Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.1.

    C:\Program Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrameworkInferenc ...

  5. 国外物联网平台初探(二) ——微软Azure IoT

    平台定位 连接设备.其它 M2M 资产和人员,以便在业务和操作中更好地利用数据. 连接 IoT 设备 将所有设备连接到云,从这些设备接收大规模数据,以及管理这些设备的授权和限制. 在将设备连接到云和处 ...

  6. hdoj--1258--Sum It Up(dfs)

    Sum It Up Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  7. 使用Azure Docker容器注册表服务

    1.登录你的Azure 容器注册表服务 az acr login --name ledesign 2.给你本地准备好的Image打上上云之前的版本标签 docker tag ledesign-serv ...

  8. hdu2680 Choose the best route 最短路(多源转单源)

    此题中起点有1000个,边有20000条.用链式前向星建图,再枚举起点用SPFA的话,超时了.(按理说,两千万的复杂度应该没超吧.不过一般说计算机计算速度 1~10 千万次/秒.也许拿最烂的计算机来卡 ...

  9. DELPHI调试出现disconnected session的解决办法

    我在控制面板中,是禁用了UAC的,如下图 但是,在注册表中启用了UAC(EnableLUA), 工程中请求了管理员权限,如下图: 所以,整个权限请求混乱了. 解决办法,要么把注册表的LUA设置为0,要 ...

  10. Java 类 对象 包

    Java类和对象 类是具有相同属性和行为的一组对象的集合.(属性是用来描述对象的特征可以理解为成员变量 例如:一个学生(对象)他的类可能是学校,它的属性可能是学号,姓名,年龄,班级,成绩等等) 例子: ...