Submission #403606

#TimeUsernameProblemLanguageResultExecution timeMemory
403606lyc족보 (KOI18_family)C++14
59 / 100
600 ms196940 KiB
#include <bits/stdc++.h> using namespace std; #define TRACE(x) cerr << #x << " :: " << x << endl #define _ << " " << #define SZ(x) (int)(x).size() #define ALL(x) (x).begin(),(x).end() #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define RFOR(i,a,b) for (int i=(a);i>=(b);--i) //const int mxN = 3e5+5; //const int mxK = 3e5+5; const int mxN = 5005; const int mxK = 5005; const int inf = 1e9+5; int K; struct Tree { int N; vector<int> g[mxN]; int pa[mxN]; int dep[mxN]; int _lca[mxK][mxK]; void read() { FOR(i,1,N){ int P; cin >> P; g[P].push_back(i); } } void dfs(int u) { for (int& v : g[u]) { pa[v] = u; dep[v] = dep[u]+1; dfs(v); } } int lca(int a, int b) { if (_lca[a][b] != -1) return _lca[a][b]; if (a == b) return a; if (dep[a] > dep[b]) { return _lca[a][b] = lca(pa[a],b); } else { return _lca[a][b] = lca(a,pa[b]); } } void run() { memset(pa,-1,sizeof pa); dep[0] = 0; dfs(0); memset(_lca,-1,sizeof _lca); } inline int lcd(int a, int b) { return dep[lca(a,b)]; } } A, B; int mn[mxN]; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> A.N >> B.N >> K; A.read(); B.read(); A.run(); B.run(); bool die = 0; FOR(i,1,K){ FOR(j,1,A.N) mn[j] = inf; FOR(j,1,K) if (j != i) { int a = A.lcd(i,j), b = B.lcd(i,j); mn[a] = min(mn[a],b); } RFOR(j,A.N-1,1) mn[j] = min(mn[j+1],mn[j]); FOR(j,1,K) if (j != i) { int a = A.lcd(i,j), b = B.lcd(i,j); if (a < A.N) die |= b > mn[a+1]; } } cout << (die ? "NO" : "YES") << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...