恩先膜拜一下岩哥.....出的题真好.....
题目大意:
就是现在有一棵有N个点的树, N <= 64, 现在每条边都随机从0~L取一个比边权值(L <= 8), 问生成的树两两结点之间距离不超过S的概率是多少(S <= 512)
大致思路:
训练赛的时候想到了用dp[u][d]表示对于结点u其子节点到它的最远距离是d的概率作为选择的状态来进行转移, 但是当时没想出来转移过程....对于u结点有多个儿子的情况不知道该怎么办
结果是个对于我来说第一次见的做法....
每次考虑儿子结点的时候一个一个的考虑, 将考虑完的部分当做一个整体和下一个儿子结点考虑进行合并, 这样每次都相当于是两个节点...感觉真是巧妙...
具体做法写在代码注释里了, 详情看代码注释吧...
代码如下:
Result : Accepted Memory : 1908 KB Time : 46 ms
/*
* Author: Gatevin
* Created Time: 2015/7/26 23:12:23
* File Name: E.cpp
*/
#include<iostream>
#include<sstream>
#include<fstream>
#include<vector>
#include<list>
#include<deque>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<cstdio>
#inclu