省選模擬6

2022-09-19 09:39:13 字數 2308 閱讀 3825

設 \(f_\) 表示以 \(i\) 為根的子樹內裡 \(i\) 最近的選擇點的深度為 \(j\)

轉移的話

\((j-dep_x)*2>k\) 直接加上對應的位置

\(0 < (j-dep_x)*2\leq k\) 需要判斷保證選擇的子樹之間的距離要大於 \(k\)

還有一種 \(f_i,dep_i=f_i,dep_+w_i\) 選擇自己的情況

是以下標為深度的轉移,於是長鏈剖分優化一下就行

還***是字尾最大值

code

#include#define int long long

#define rint signed

#define inf 0x3f3f3f3f3f3f3f3f

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}int n,k;

int w[1000010],son[1000010],dep[1000010],md[1000010];

int head[1000010],ver[2000010],to[2000010],tot;

vectorf[1000010],vec;

inline void add(int x,int y)

void dfs1(int x,int fa)

}void dfs2(int x,int fa)else f[x].emplace_back(max(w[x],f[x].size()?f[x].back():0ll));

for(int i=head[x],s,t,e;i;i=to[i])else if(2*(d-dep[x])>0)else if(md[y]>dep[x]+k)

if(i>s) vec[i]=max(vec[i],vec[i-1]);

if(d-dep[y]>=0) vec[i]=max(vec[i],f[y][e-(d-dep[y])]);

} for(int i=s;i<=t;i++) f[x][i]=vec[i];

f[y].clear();f[y].shrink_to_fit(); }}

signed main()\) 表示將 \(u,v\) 子樹合併時產生的逆序對的平均數

分別是先選 \(u\) 的情況和先選 \(v\) 的情況

先選了 \(u\) 那麼要加上 \(u\) 的每乙個子樹和 \(v\) 去合併的貢獻,還有 \(g(u,v)\)

由於每個子樹之間互補影響與 \(v\) 的貢獻,所以可以直接加

先選 \(v\) 的同理

還需要乘上乙個係數

最後就是 \(f(u,v)=\fracf(w,v)+g(u,v))+siz_v*(\sum\limits_w f(w,u)+g(v,u))}\)

還有一種情況,就是為祖先關係時,無論如何都會產生貢獻要單獨加上

code#include//#define int long long

#define rint signed

#define mod 1000000007

#define inf 0x3f3f3f3f3f3f3f3f

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}int n,rt,ans;

int inv[5000],siz[5000],fa[5000];

int head[5000],ver[10000],to[10000],tot;

int f[5000][5000],g[5000][5000];

inline void add(int x,int y)

inline void md(int &x)

inline int qpow(int x,int k)

return res;

}void dfs(int x,int fath)

}inline int calc(int x,int y)

for(int i=head[y];i;i=to[i])

f[x][y]=1ll*f[x][y]*inv[siz[x]+siz[y]]%mod;

return f[y][x]=f[x][y];

}signed main()

} }printf("%d\n",ans);

return 0;

}

手模前 \(4\) 個,第 \(5\) 個並查集縮一下再染色就行

後面的右手扶牆走,碰到乙個不一樣的顏色就換一種顏色染,最後再手動調整

省選模擬 19 09 11

ps.博主趁資訊課摸魚考的暴零模擬 看門人憑感覺就知道是長鏈剖分,將路徑查分一下,dis u di sv 2 dis lc adis u dis v 2 dis disu disv 2 disl ca 維護fu,if fu,i 表示u的子樹,深度為 i 的點的 dis disdi s最大值 考慮如何...

省選模擬96

容易發現當 k 3 時無解。然後容易證明當 k 3 時,只有 m 3 才是有解的。然後直接做不好做,考慮欽定然後容斥出合法方案。對於 k 3 列舉乙個點,然後計算另乙個的方案數。其他情況類似,欽定滿足條件的角,然後容斥。然後對於每乙個 o n 的式子用組合恒等式大力化簡就可以做到 o 1 了。考慮每...

省選模擬86

首先考慮基礎的dp定義,那麼發現轉移需要的係數只和dp是奇數的點的個數有關,所以將這個東西記錄在dp狀態中就行了。然後推一下dp轉移,發現轉移係數和奇數的點的個數沒有關係,只與是否存在這樣的點有關,所以用01來記錄就可以了。考慮用總方案減去不合法的方案,也就是1號點能到達的點和2號點能到達的點沒有交...