結果
問題 | 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 |
ソースコード
#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; }