結果

問題 No.2949 Product on Tree
ユーザー nouka28
提出日時 2024-06-21 15:31:09
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 373 ms / 2,000 ms
コード長 722 bytes
コンパイル時間 5,384 ms
コンパイル使用メモリ 311,352 KB
実行使用メモリ 29,124 KB
最終ジャッジ日時 2024-09-23 07:20:10
合計ジャッジ時間 23,516 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 46
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;

#include<atcoder/all>
using mint=atcoder::modint998244353;

int main(){
    int n;cin>>n;
    vector<mint> a(n);for(auto&e:a){int x;cin>>x;e=x;}
    vector<vector<int>> g(n);
    for(int i=0;i<n-1;i++){
        int u,v;cin>>u>>v;
        u--;v--;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    mint ans=0;

    auto dfs=[&](auto dfs,int p,int prev=-1)->mint {
        mint sm1=0,sm2=0;
        for(auto&e:g[p]){
            if(e==prev)continue;
            mint esm=dfs(dfs,e,p);
            sm1+=esm;
            sm2+=esm*esm;
        }
        ans+=a[p]*(sm1+(sm1*sm1-sm2)/2);
        return a[p]*(sm1+1);
    };
    dfs(dfs,0);
    cout<<ans.val()<<endl;
}
0