結果

問題 No.439 チワワのなる木
ユーザー 🍡yurahuna
提出日時 2016-04-29 01:19:44
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 93 ms / 5,000 ms
コード長 2,661 bytes
コンパイル時間 1,607 ms
コンパイル使用メモリ 173,708 KB
実行使用メモリ 18,176 KB
最終ジャッジ日時 2024-10-11 00:14:32
合計ジャッジ時間 3,133 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 28
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
using namespace std;
#define int long long // <-----!!!!!!!!!!!!!!!!!!!
#define rep(i,n) for (int i=0;i<(n);i++)
#define rep2(i,a,b) for (int i=(a);i<(b);i++)
#define rrep(i,n) for (int i=(n)-1;i>=0;i--)
#define rrep2(i,a,b) for (int i=(b)-1;i>=(a);i--)
#define all(a) (a).begin(),(a).end()
typedef long long ll;
typedef pair<int, int> P;
// O(N)
// 2DFS
struct Chiwawa {
int w, ww;
Chiwawa() { w = 0, ww = 0; }
};
const int MAX_N = 100000;
int N;
string s;
vector<vector<int>> G;
Chiwawa cww[MAX_N]; // (w, ww) (0)
// cwwdfs
Chiwawa dfs(int now, int pre) {
Chiwawa ret;
for (auto nxt : G[now]) {
if (nxt == pre) continue;
auto child = dfs(nxt, now);
ret.w += child.w;
ret.ww += child.ww;
}
if (s[now] == 'w') {
// wwww
ret.ww += ret.w;
// w1
++ret.w;
}
cww[now] = ret;
return ret;
}
int ans; //
// dfs
// p: v(w, ww)
void dfs2(int v, int pre, Chiwawa p) {
// cww
if (s[v] == 'c') {
ans += p.ww; // pww
for (auto ch : G[v]) {
if (ch == pre) continue;
ans += cww[ch].ww; // chww
}
}
for (auto ch : G[v]) {
if (ch == pre) continue;
// p
auto tmp = p;
// vch
tmp.w += cww[v].w, tmp.ww += cww[v].ww;
tmp.w -= cww[ch].w, tmp.ww -= cww[ch].ww;
if (s[v] == 'w') {
// v 'w' v 'w' 使ww
// v 'w' ch 'w' 使 ww
tmp.ww -= cww[ch].w;
// v 'w' p 'w' 使 ww
tmp.ww += p.w;
}
//
dfs2(ch, v, tmp);
}
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin >> N;
cin >> s;
G.resize(N);
rep(i, N - 1) {
int a, b;
cin >> a >> b;
a--; b--;
G[a].emplace_back(b);
G[b].emplace_back(a);
}
//
dfs(0, -1);
//
dfs2(0, -1, Chiwawa());
cout << ans << endl;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0