2024.10.3 2022-2023 ICPC Brazil Subregional Programming Contest

EssentialSingularity發表於2024-10-29

比賽連結

Solved:12/14

Rank:5/1k+

Rank(vp):49/2k+

Penalty:1619

Dirt:45%


前 10 個題都比較簡單/套路。


L

做法很好想。但是……

因為不會寫啟發式合併卡了 40min,警鐘長鳴!

int sum[N];
map<int,int> col[N];
int sz[N];
ll now[N],ans[N];
void mrg(int x,int y){
    x=find(x),y=find(y);
    if(sz[x]<sz[y])swap(x,y),now[y]=now[x];
    sz[x]+=sz[y],f[y]=x;
    for(auto& [z,w]:col[y]){
        int& t=col[x][z];
        now[x]-=1ll*t*(sum[z]-t);
        t+=w;
        now[x]+=1ll*t*(sum[z]-t);
    }
}
void dfs(int u,int f,int i){
    sz[u]=1,++col[u][c[u]];
    now[u]=sum[c[u]]-1;
    for(auto [v,j]:e[u])if(v^f)
        dfs(v,u,j),mrg(u,v);
    ans[i]=now[find(u)];
}

K

\[f_{n,k}=\sum_if_{n-d_i,k-p_i}, n\leq 10^9, d_i\leq 10, k\leq 400 \]

這個\(d\)的範圍很想矩乘,如果直接把400全壓進向量裡就是4000維,肯定T。

\(f_n(x) = \sum_{k=0}^K f_{n,k}x^k\),則轉移方程變為

\[f_n(x) = \sum_i x^{p_i}f_{n-d_i}(x) \]

\(f_0(x)=1\)。這樣就變成多項式為元素的矩陣乘法了。

複雜度\(O(d^3K^2\log n)\)

也可以直接做 4000 項的線性遞推。複雜度少一個 d。

相關文章