省流:\(45+20+5+0=70\)
簡稱:唐詩
在此膜拜 \(klz\) \(Heldivis\) \(Sorato\) \(czl\) \(Ech0\_7\) yxans lihe_qwq 大佬
T1
先看的 T1 ,想了一個拓排(其實是看錯題了),然後過了第一個樣例,然後咋調都過不去,就去碼暴力了。
過了大概 10min 發現看錯題了,然後一會就想出來個 \(O(n^2)\) 的樹形 DP (\(45pts\))然後就潤了。
核心程式碼:
if(x==root) f[x]=g[x];
else
{
f[x]=f[fa[x]]-(siz[x]>=k)+g[x];
ans=max(ans,f[x]);
}
然後正解是欽定一個點為 \(LCA\) 然後 DP (其實賽時想到了但是不會轉移,還是 \(\large 菜\))
核心程式碼:
void dfs(int x,int fat)
{
siz[x]=1,g[x]=0,f[x]=-1e18;
for(auto y:e[x])
{
if(y==fat) continue;
dfs(y,x);siz[x]+=siz[y];
if(siz[y]>=k) g[x]++;
}
}
void DP(int x,int fat)
{
int mx=-1e18;
for(auto y:e[x])
{
if(y==fat) continue;
DP(y,x);
f[x]=max(f[x],f[y]+g[x]-(siz[y]>=k));
ans=max(ans,mx+f[y]+(n-siz[x]>=k)-(siz[y]>=k));
mx=max(mx,f[y]+g[x]-(siz[y]>=k));
}
ans=max(ans,f[x]+(n-siz[x]>=k));
f[x]=max(f[x],g[x]);
}
T2
首先寫的暴力(程式碼就不放了)(\(10pts\))
然後 \(L=R=\frac{n\cdot(n+1)}{2}\) 是單調棧板子(\(10pts\))
正解是二分(但是二分函式不是太好想(就很妙))
核心程式碼:
inline bool check(int x)
{
int sum=0;
fd(i,1,n) fd(j,1,st[i])
sum+=max(min(x/a[i],j+en[i]-1)-j+1,0ll);
return sum<L;
}
然後堆維護輸出就行了
T3
一眼 DP 結果發現是容斥
然後寫了個暴力(\(5pts\))
正解好像是個環
正解還沒寫完,以後補……
T4
第一眼想到預處理出一個點可控制的區間,然後好像有甚麼人類智慧,然後就不會了
然後碼了 100+ 行的暴力還沒碼完……
正解 也是 還沒寫完,以後補……
總結
真的很糖 完美繼承了小奶龍の好習慣
然後很遺憾的是 T1 已經十分接近 \(Accept\) 了,還有 T1 的另外 \(30pts\) 部分分沒想到去碼(尤其是鏈那個)……