제출 #1138769

#제출 시각아이디문제언어결과실행 시간메모리
1138769bilgunHomework (CEOI22_homework)C++20
0 / 100
350 ms589824 KiB
#include <bits/stdc++.h> using namespace std; vector<int> graph[2000001]; int par[2000001], n = 0, type[2000001], sz[2000001], mn[2000001], mx[2000001]; void dfs( int i){ if( !graph[i].size()) return; int u = graph[i][0], v = graph[i][1]; dfs(u); dfs(v); sz[i] += sz[u] + sz[v]; if( type[i] == 1){ mn[i] = min( mn[u], mn[v]); mx[i] = mx[u] + mx[v] - 1; } else if( type[i] == 2){ mn[i] = mn[u] + mn[v]; mx[i] = max( sz[u] + mx[v], sz[v] + mx[u]); } } int main() { string s; cin >> s; int curr = 0; for( int i = 0; i < s.size(); i++){ if( s[i] == 'm'){ n++; par[n] = curr; graph[curr].push_back(n); curr = n; if( s[i + 2] == 'n') type[curr] = 1; else type[curr] = 2; i+=3; } else if( s[i] == '?'){ n++; graph[curr].push_back(n); curr = n; mn[curr] = mx[curr] = sz[curr] = 1; } else { curr = par[curr]; } } dfs(1); cout << mx[1] - mn[1] + 1; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...