結果
| 問題 |
No.439 チワワのなる木
|
| ユーザー |
vjudge1
|
| 提出日時 | 2024-12-22 11:14:23 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 61 ms / 5,000 ms |
| コード長 | 758 bytes |
| コンパイル時間 | 2,030 ms |
| コンパイル使用メモリ | 168,976 KB |
| 実行使用メモリ | 17,136 KB |
| 最終ジャッジ日時 | 2024-12-22 11:14:27 |
| 合計ジャッジ時間 | 3,862 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 28 |
ソースコード
#include<bits/stdc++.h>
#define FL(i,a,b) for(ll i=(a);i<=(b);i++)
#define FR(i,a,b) for(ll i=(a);i>=(b);i--)
#define ll long long
using namespace std;
const ll MAXN = 1e5 + 10;
ll n,sumc=0,sumw=0,ans=0;
ll f[MAXN],g[MAXN];
vector<ll>G[MAXN];
char s[MAXN];
void dfs(ll u,ll fa){
if(s[u]=='w') f[u]++;
else g[u]++;
for(ll v:G[u]){
if(v==fa) continue;
dfs(v,u);
f[u]+=f[v];
g[u]+=g[v];
}
if(s[u]=='w'){
for(ll v:G[u]){
if(v==fa) continue;
ans+=g[v]*(sumw-f[v]-1);
}
ans+=(sumc-g[u])*(f[u]-1);
}
}
signed main(){
scanf("%lld",&n);
scanf("%s",s+1);
FL(i,1,n-1){
ll u,v;
scanf("%lld%lld",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
FL(i,1,n){
if(s[i]=='w') sumw++;
else sumc++;
}
dfs(1,0);
printf("%lld\n",ans);
}
vjudge1