Submission #36167981


Source Code Expand

//#define
#define SHOW(n) cout << #n << " = " << n << endl;
//Visual Studio用
#define _CRT_SECURE_NO_WARNINGS
//include
#include <iostream>
#include <algorithm>
#include <vector>
//名前空間
using namespace std;
//型
using ll = long long;
struct Edge {
	ll to;
	ll weight;
	Edge(ll t, ll w) :to(t), weight(w) {}
};
class Graph {
	vector<vector<Edge>> g;
	int siz;
public:
	Graph(int n) :g(n), siz(n) {};
	vector<Edge>& operator [](int v) {
		return g[v];
	}
	int size()const { return siz; }
	void add(int u, int v, ll w) {
		g[u].push_back({ v,w });
	}
	void add(int u, int v) {
		g[u].push_back(Edge{ v,1 });
	}
	void wadd(int u, int v, ll w) {
		add(u, v, w);
		add(v, u, w);
	}
	void wadd(int u, int v) {
		add(u, v);
		add(v, u);
	}

};
//演算子オーバーロード
template<class T>istream& operator>>(istream& is, vector<T>& v) { for (auto& e : v)is >> e; return is; }

//aclが使えない環境ではコメントアウト
/**/
#include <atcoder/modint.hpp>
using namespace atcoder;
/**/

using mint = modint1000000007;

int main() {
//入出力高速化、cout(cin)とprintf(scanf)を同時に使う場合コメントアウト
	/**/
	cin.tie(nullptr);
	ios::sync_with_stdio(false);
	/**/
	
	int n;
	cin >> n;
	vector<char> c(n);
	cin >> c;
	Graph g(n);
	for (int i = 0; i < n - 1; ++i) {
		int a, b;
		cin >> a >> b;
		--a, --b;
		//グラフに双方向に辺を張る
		g.wadd(a, b);
	}
	//dp[pos][st] := 頂点posの部分木とその連結成分について、それぞれの連結成分の状態がすべてstであるときの通り数
	//st 0=aのみ,1=bのみ,2=aとb両方ある
	//res = dp[0][2]
	//mint は modint の略で、自動的にmodを取ってくれる整数型
	vector<vector<mint>> dp(n, vector<mint>(3));

	//頂点vから木dp
	auto dfs = [&](auto&& self, int v, int prev) ->void {
		mint m1 = 1, m2 = 1;
		//頂点vのすべての子頂点sに対して計算
		for (auto [s, w] : g[v]) {
			//逆流防止
			if (s == prev)continue;
			//子頂点sから木dpして、先に子頂点の情報を更新する
			self(self, s, v);
			if (c[v] == 'a') {
				m1 *= (dp[s][0] + dp[s][2]);
			}
			else {
				m1 *= (dp[s][1] + dp[s][2]);
			}
			m2 *= (dp[s][0] + dp[s][1] + 2 * dp[s][2]);
		}

		if (c[v] == 'a') {
			dp[v][0] = m1;
		}
		else {
			dp[v][1] = m1;
		}
		dp[v][2] = m2 - m1;
	};

	dfs(dfs, 0, -1);


	cout << dp[0][2].val() << endl;
	

	return 0;
}

Submission Info

Submission Time
Task 073 - We Need Both a and b(★5)
User ryu150
Language C++ (GCC 9.2.1)
Score 5
Code Size 2513 Byte
Status AC
Exec Time 68 ms
Memory 16380 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 5 / 5
Status
AC × 3
AC × 43
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 10_max_00.txt, 10_max_01.txt, 10_max_02.txt, 10_max_03.txt, 10_max_04.txt, 10_small_00.txt, 10_small_01.txt, 10_small_02.txt, 10_small_03.txt, 10_small_04.txt, 10_small_05.txt, 10_small_06.txt, 10_small_07.txt, 10_small_08.txt, 10_small_09.txt, 10_small_10.txt, 10_small_11.txt, 10_small_12.txt, 10_small_13.txt, 10_small_14.txt, 10_small_15.txt, 10_small_16.txt, 10_small_17.txt, 10_small_18.txt, 10_small_19.txt, 11_large_00.txt, 11_large_01.txt, 11_large_02.txt, 11_large_03.txt, 11_large_04.txt, 11_large_05.txt, 11_large_06.txt, 11_large_07.txt, 11_large_08.txt, 11_large_09.txt, 20_uni_00.txt, 20_uni_01.txt, 30_hand_00.txt, 30_hand_01.txt, 30_hand_02.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 5 ms 3628 KiB
00_sample_01.txt AC 2 ms 3440 KiB
00_sample_02.txt AC 2 ms 3596 KiB
10_max_00.txt AC 60 ms 16316 KiB
10_max_01.txt AC 68 ms 15904 KiB
10_max_02.txt AC 64 ms 16016 KiB
10_max_03.txt AC 65 ms 16380 KiB
10_max_04.txt AC 66 ms 15968 KiB
10_small_00.txt AC 3 ms 3468 KiB
10_small_01.txt AC 2 ms 3472 KiB
10_small_02.txt AC 3 ms 3436 KiB
10_small_03.txt AC 2 ms 3596 KiB
10_small_04.txt AC 3 ms 3596 KiB
10_small_05.txt AC 2 ms 3624 KiB
10_small_06.txt AC 2 ms 3492 KiB
10_small_07.txt AC 3 ms 3524 KiB
10_small_08.txt AC 2 ms 3612 KiB
10_small_09.txt AC 2 ms 3592 KiB
10_small_10.txt AC 2 ms 3492 KiB
10_small_11.txt AC 3 ms 3540 KiB
10_small_12.txt AC 2 ms 3576 KiB
10_small_13.txt AC 2 ms 3572 KiB
10_small_14.txt AC 2 ms 3436 KiB
10_small_15.txt AC 2 ms 3628 KiB
10_small_16.txt AC 2 ms 3432 KiB
10_small_17.txt AC 2 ms 3496 KiB
10_small_18.txt AC 2 ms 3488 KiB
10_small_19.txt AC 2 ms 3536 KiB
11_large_00.txt AC 7 ms 3616 KiB
11_large_01.txt AC 2 ms 3468 KiB
11_large_02.txt AC 3 ms 3604 KiB
11_large_03.txt AC 4 ms 3644 KiB
11_large_04.txt AC 2 ms 3668 KiB
11_large_05.txt AC 3 ms 3560 KiB
11_large_06.txt AC 3 ms 3688 KiB
11_large_07.txt AC 4 ms 3668 KiB
11_large_08.txt AC 3 ms 3548 KiB
11_large_09.txt AC 3 ms 3628 KiB
20_uni_00.txt AC 62 ms 16020 KiB
20_uni_01.txt AC 60 ms 16328 KiB
30_hand_00.txt AC 3 ms 3596 KiB
30_hand_01.txt AC 1 ms 3600 KiB
30_hand_02.txt AC 3 ms 3540 KiB