結果

問題 No.2822 Lights Up! (Tree Edition)
ユーザー 沙耶花沙耶花
提出日時 2024-07-26 21:58:26
言語 C++17(gcc12)
(gcc 12.3.0 + boost 1.87.0)
結果
AC  
実行時間 123 ms / 2,000 ms
コード長 996 bytes
コンパイル時間 4,764 ms
コンパイル使用メモリ 266,560 KB
実行使用メモリ 15,276 KB
最終ジャッジ日時 2024-07-26 21:58:37
合計ジャッジ時間 10,244 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 142
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace atcoder;
using mint = modint998244353;
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf32 1000000001
#define Inf64 1000000000000000001
int ans[100001],sum[100001];
vector<vector<int>> E;
string S;
void dfs(int cv,int pv){
	rep(i,E[cv].size()){
		int to = E[cv][i];
		dfs(to,cv);
		sum[cv] ^= sum[to];
	}
	if(cv!=0){
		if((S[cv-1]=='#')==sum[cv])ans[cv] = 0;
		else ans[cv] = 1;
	}
	else{
		for(int i=1;i<E.size();i++){
			ans[cv] ^= ans[i];
		}
	}
	sum[cv] ^= ans[cv];
}
int main(){
	int n;
	cin>>n;
	E.resize(n);
	for(int i=1;i<n;i++){
		int p;
		cin>>p;
		p--;
		E[p].push_back(i);
	}
	cin>>S;
	dfs(0,-1);
	int K;
	cin>>K;
	dsu D(n);
	rep(_,K){
		int u,v;
		cin>>u>>v;
		u--,v--;
		D.merge(u,v);
	}
	auto g = D.groups();
	rep(i,g.size()){
		int x = 0;
		rep(j,g[i].size())x ^= ans[g[i][j]];
		if(x!=0){
			cout<<"No"<<endl;
			return 0;
		}
	}
	cout<<"Yes"<<endl;
    return 0;
}
0