标签:连通图 lan 思路 方案 linux log noi return 转化
由于玄学错误以及各种挂分,这场考试连100都没上……
玄学思路可以蹭过去,但是log函数在long long的情况下异常玄学,下面这段代码在Windows下运行结果为2,Linux下正确
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int val=8,p=2;
int c=log(val)/log(p);
cout<<c;
return 0;
}
所以还是少用内置函数比较好……
树形dp神题
组合推公式
HKH巨佬凭借超强的猜想能力与数学天赋A掉了这道题%%%
首先,这道题如果被题面迷惑住会连暴力都不会打的(像我一样)
一次操作可以反向来考虑,对于一个欧拉图删去一条边或加上一条边形成的图就是满足题意的图了(因为欧拉一个点度数至少为2,删去边后不可能孤立),而对于一个 \(n\) 个点的欧拉图删边共有 \(C_{n}^{2}\) 种方案(即n个点中任选2个断边或连边)
于是问题转化为求 \(n\) 个点的欧拉图的数量。
考虑欧拉图的性质,欧拉图为所有点度数为偶数的连通图
那么可以所有点度数为偶数的图减去不连通的图即可
设 \(i\) 个点总的偶图的数量为 \(g_i\),欧拉图的数量 \(f_i\)
那么 \(g_i=2^{C_{n-1}^{2}}\), 可以这么理解:先单独选出一个点来补漏,剩下 \(i-1\) 个点随意建图,则单独的点总可以通过向奇数度数的点连边而补成偶数度数的
再来看 \(f_i\) 的转移:首先总共的图为 \(g_i\), 而不连通的图可以这样考虑:先选出一个 \(j\) 个点的欧拉图,剩下的 \(i-j\) 个点为随意偶图,于是转移为:
\(f_i=g_i-\sum_{j=1}^{i-1} f_j*g_{i-j}*C_{i-1}^{j-1}\)
其中C的部分表示编号的轮换
时间复杂度 \(n^2\)
貌似类似于 城市规划 可以用FFT优化至 \(nlogn\)
标签:连通图 lan 思路 方案 linux log noi return 转化
原文地址:https://www.cnblogs.com/yang-cx/p/14725453.html