國家集訓隊 Crash 的文明世界

2022-05-30 18:54:11 字數 1289 閱讀 9799

洛谷:

套路題,直接上斯特林數把指數搞成組合數:

\[\begin

s(i)&=\sum_^d(i,j)^k\\

&=\sum_^\sum_^s_2(k,t)\binomt!\\

&=\sum_^ks_2(k,t)t!\sum_^\binom

\end

\]注意到\(k\)很小,我們考慮\(dp\),設後面一塊為\(f\),並且只運算元樹的貢獻,即:

\[\beginf_&=\sum_\binom\\&=\sum_\binom+\binom\\&=\sum_f_+f_\end

\]然後同樣的思路做一遍二次換根就好了。

複雜度\(o(nk)\)。

#includeusing namespace std;

void read(int &x)

void print(int x)

void write(int x)

#define lf double

#define ll long long

#define pii pair#define vec vector#define pb push_back

#define mp make_pair

#define fr first

#define sc second

#define for(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++)

const int maxn = 5e4+10;

const int inf = 1e9;

const lf eps = 1e-8;

const int mod = 1e4+7;

int f[maxn][160],g[maxn][160],n,k,s[160][160],fac[maxn],ifac[maxn],inv[maxn];

int head[maxn],tot,r[160];

struct edgee[maxn<<1];

void add(int u,int v) ,head[u]=tot;}

void ins(int u,int v)

void prepare()

void dfs(int x,int fa)

}void dfs2(int x,int fa)

for(int i=head[x];i;i=e[i].nxt) if(e[i].to!=fa) dfs2(e[i].to,x);

}int main()

return 0;

}

P4827 國家集訓隊 Crash 的文明世界

求出對於樹上每個點 x 的 sum ndis x,u k 所有邊長為 1。根據斯特林反演 m n sum n beginn j endc m jj 可以得到 sum n sum begink j endc jj sum begink j endj sum nc j sum begink j endj...

國家集訓隊 旅遊

題目背景 ray 樂忠於旅遊,這次他來到了 t 城。t 城是乙個水上城市,一共有 nn 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有 n 1n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心...

國家集訓隊 Tree I

題目 給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有nee dneed need 條白色邊的生成樹。題目保證有解。思路 凸優化裸題,要注意的就是,優先選白色 優先選黑色也行 主要是同一斜率可能會切到很多點,那麼就要有乙個標準,要麼選最小點,要麼選最大。另外求出來的點不一定是ne...