Problem A:
题目大意:
给出以节点1为根的一棵树A,判断它是否是特殊的。一棵树是特殊的当且仅当不存在和它不完全相同的一棵树B,使得A中点i到点1的距离和B中相等。
题解:
假设一个点x的深度是d,它的父亲是y,如果存在一个深度为d-1的点z,那么把x从y下面移到z下面就可以得到树B了。所以求出每个深度的点的个数,只有当所有深度的点的个数都为1,最大深度的点的个数任意的时候 树是特殊的。
Problem B:
题目大意:
给出N个点N条边的无向图判断是否存在哈密顿路。 N<=1000.
题解:
一开始没看到边也是N条,然后去各种百度哈密顿路的求法......
我的做法是:
先去掉重边和自环,然后判断连通性.如果不连通那么肯定不存在。如果连通,那么剩下的只可能是N-1条边或者N条边。
考虑N-1条边的情况,是一棵树,草稿纸上画一下可以发现所有点的度数必须小于等于2才有哈密顿回路。
考虑N条边的情况,是一棵树上加了一条边。所以枚举删去一条边,然后用N-1条边时的判断方法搞。复杂度O(N),但是有100组数据,所以TLE了。
优化:在连通图图的前提下,如果存在哈密顿路,肯定是一条链上加了一条边的样子。所以最多有2个点的度数是3,其他点的度数小于等于2. 而且如果所有点的度数都小于等于2那么一定存在。 所以好多case就可以直接判断了。 不是很完美,但是还是水过了。。
官方题解是从度数最小的点开始DFS,复杂度就是O(N)的。不知道为什么。
Problem C:
有一棵nn个节点的树。令1号点为根且令d_idi为1号点到ii号点的距离。 选出至少两个节点。显然,一共有2^n-n-12n−n−1种选取的方案。等概率的随机选取一种方案。接着,令ff为选取的点中d_idi的最大值,gg为选取点中d_idi的次大值(ff可能等于gg)。 最后要知道\frac{(f+1)(g+1)}{f+1+g+1}f+1+g+1(f+1)(g+1)的期望值。 N《=100000 题解:
先求出距离,然后排序,枚举最大值v[j]和次大值v[i], 当 j-i>=65的时候 概率就很小了,分母是2^(n-i+1) 级别的, j-i>=60的时候 就不必计算了。 和之前CF的一道题差不多。 A了3题拿到了Rank 5. 好开心。