题目名称 | 1202. 血缘关系 |
---|---|
输入输出 | kankei.in/out |
难度等级 | ★★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 256 MiB |
测试数据 | 6 |
题目来源 | 王者自由 于2012-10-23加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:2, 提交:17, 通过率:11.76% | ||||
落痕 | 100 | 0.471 s | 97.77 MiB | C++ |
王者自由 | 100 | 1.203 s | 116.16 MiB | C++ |
Zwoi_Lpat | 16 | 0.000 s | 0.29 MiB | C |
落痕 | 16 | 0.502 s | 78.21 MiB | C++ |
shallow dream | 0 | 0.000 s | 0.00 MiB | Pascal |
shallow dream | 0 | 0.000 s | 0.00 MiB | Pascal |
Zwoi_Lpat | 0 | 0.000 s | 0.29 MiB | C |
shallow dream | 0 | 0.000 s | 255.75 MiB | Pascal |
maxinyang | 0 | 0.001 s | 0.29 MiB | C |
Zwoi_Lpat | 0 | 0.001 s | 0.29 MiB | C |
关于 血缘关系 的近10条评论(全部评论) | ||||
---|---|---|---|---|
调试了半天居然是弗洛伊德写错了,可耻啊
|
【问题描述】
我们正在研究妖怪家族的血缘关系。每个妖怪都有相同数量的基因,但是不同的妖怪的基因可能是不同的。我们希望知道任意给定的两个妖怪之间究竟有多少相同的基因。由于基因数量相当庞大,直接检测是行不通的。但是,我们知道妖怪家族的家谱,所以我们可以根据家谱来估算两个妖怪之间相同基因的数量。
妖怪之间的基因继承关系相当简单:如果妖怪C是妖怪A和B的孩子,则C的任意一个基因只能是继承A或B的基因,继承A或B的概率各占50%。所有基因可认为是相互独立的,每个基因的继承关系不受别的基因影响。
现在,我们来定义两个妖怪X和Y的基因相似程度。例如,有一个家族,这个家族中有两个毫无关系(没有相同基因)的妖怪A和B,及它们的孩子C和D。那么C和D相似程度是多少呢?因为C和D的基因都来自A和B,从概率来说,各占50%。所以,依概率计算C和D平均有50%的相同基因,C和D的基因相似程度为50%。需要注意的是,如果A和B之间存在相同基因的话,C和D的基因相似程度就不再是50%了。
你的任务是写一个程序,对于给定的家谱以及成对出现的妖怪,计算它们之间的基因相似程度。
【输入】
第一行两个整数n和k。n(2≤n≤300)表示家族中成员数,它们分别用1, 2, …, n来表示。k(0≤k≤n-2)表示这个家族中有父母的妖怪数量(其他的妖怪没有父母,它们之间可以认为毫无关系,即没有任何相同基因)。
接下来的k行,每行三个整数a, b, c,表示妖怪a是妖怪b的孩子。
然后是一行一个整数m(1≤m≤n2),表示需要计算基因相似程度的妖怪对数。
接下来的m行,每行两个整数,表示需要计算基因相似程度的两个妖怪。
你可以认为这里给出的家谱总是合法的。具体来说就是,没有任何的妖怪会成为自己的祖先,并且你也不必担心会存在性别错乱问题。
【输出】
共m行。可k行表示第k对妖怪之间的基因相似程度。你必须按百分比输出,有多少精度就输出多少,但不允许出现多余的0(注意,0.001的情况应输出0.1%,而不是.1%)。具体格式参见样例。
【样例】
family.in family.out
7 4 0%
4 1 2 50%
5 2 3 81.25%
6 4 5 100%
7 5 6
4
1 2
2 6
7 5
3 3