题目:https://loj.ac/problem/2547 一条树边 cr->v 会被计算 ( n-siz[v] ) * siz[v] 次.一条环边会被计算几次呢?于是去写了斯坦纳树. #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define ll long long using namespace std; int rdn() { ;;char ch…
题解 如果只是一棵树的话,那么就枚举每条边,分成两部分大小为\(a\)和\(b\) 那么这条边被统计的方案数是\((2^a - 1)(2^b - 1)\) 如果是一个环的话,我们枚举环上至少有\(N - i\)条边的方案数\(T(N - i)\) \(\sum_{i = 1}^{N - 1}T(N - i)\) 先枚举一个\(i\) 就是枚举\([1,n]\)中最靠左的\(l\)和最靠右的\(r\)的方案数\(g[l][r]\),且间隔不超过\(i\) 用前缀和优化更新 代码 #include…
好像也没那么难写 LOJ #2547 Luogu P4517 题意 在一棵点仙人掌中等概率选择一个点集 求选出点集的斯坦纳树大小的期望 定义点仙人掌为不存在一个点在多个简单环中的连通图 斯坦纳树为在原图中连通给定点集的一棵生成树 点数不超过$ 200$ $ Solution$ 直接计算不太方便 我们转而考虑每条边的贡献 如果这条边不在环上则一定是割边 若这条边两边都有点被选择就会被计算贡献 如果这条边在环上比较复杂 对于一个环,我们选择的边的数量一定是环大小-最长没选中点的路径的长度 定义选中某…
题目:https://loj.ac/problem/2550 只会写20分的搜索…… #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int n,m,ans; bool b[N][N],vis[N][N]; void dfs(int x,int y,bool fx,int lj) { ; ; if(vis[x][y]) { &&y==) { ; ;…
题目:https://loj.ac/problem/2548 如果知道正多边形的顶点,就是二分答案.二分图匹配.于是写了个暴力枚举多边形顶点的,还很愚蠢地把第一个顶点枚举到 2*pi ,其实只要 \( \frac{2*pi}{n} \) 就行了. 总之能得10分. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define db double using nam…
题目:https://loj.ac/problem/2551 答案是排序后依次走到 K ~ K+r-l . 想维护一个区间排序后的结果,使得可以在上面二分.求和:二分可以知道贡献是正还是负. 于是想用树套树维护一段区间的元素减去从0开始的等差数列的值.为了二分,维护 fr , sc 表示权值区间里第一个/最后一个权值. 时间空间都是 nlog2n 的,空间连 70 分的范围都开不下.而且对拍1000以内的数据还有错误,交上去 TLE 得只能得 70 分. #include<cstdio> #i…
题目:https://loj.ac/problem/2546 dp[ i ][ j ][ 0/1 ][ 0/1 ] 表示 i 子树,用 j 个点,是否用 i , i 是否被覆盖. 注意 s1<=s0 ,别弄出负角标. 用 if 判断一下,如果有值再转移,会快非常多. 复杂度是 O(n*k) 的.证明:https://www.cnblogs.com/cjyyb/p/10416839.html 先约定如果一个小于 k 的子树和一个大于 k 的子树合并,在小于 k 的子树那里看复杂度. 1.两个小于…
题目:https://loj.ac/problem/3093 考虑经过种种反射,最终射下去的光线总和.往下的光线就是这个总和 * a[ i ] . 比如只有两层的话,设射到第二层的光线是 lst ,那么 \( lst' = ( lst + lst*b[2]*b[1] + lst*(b[2]*b[1])^2 + ... )*a[2] \) 考虑令 f[ i ] 表示 “从第 i 层下面射上来的单位光线在考虑第 i+1 层反射的情况下射下去的值” . \( f[i] = b[i]+a[i]*f[i-…
题目:https://loj.ac/problem/2541 看了题解才会……有三点很巧妙. 1.分母如果变动,就很不好.所以考虑把操作改成 “已经选过的人仍然按 \( w_i \) 的概率被选,但是再次选中一个已经选过的人算作没有操作” . 2.然后要容斥,考虑强制点集 S 的人在 1 号点之后被选.其余随意,那么 \( ans=\sum\limits_{S} (-1)^{|S|} \sum\limits_{i=0}^{\infty} (1-\frac{w_1 + w_S}{A})^i \fr…
题目:https://loj.ac/problem/3089 没想到把根号之类的求对数变成算数平均值.写了个只能得15分的暴力. #include<cstdio> #include<cstring> #include<algorithm> #define db double using namespace std; ,K=; ; ,c[N][K],fl[N]; db ans; ],nxt[N<<],vl[N],sm[N]; int l[N],v[N],dy[…