제출 #1302672

#제출 시각아이디문제언어결과실행 시간메모리
1302672olizarowskibSvjetlo (COCI20_svjetlo)C++20
0 / 110
2 ms1116 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define int ll #define ft first #define sc second #define pb push_back #define all(x) x.begin(), x.end() #define pi pair<int, int> #define vi vector<int> #define tii tuple<int, int, int> #define tiii tuple<int, int, int, int> #define tiiii tuple<int, int, int, int, int> #define vpi vector<pi> #define vtii vector<tii> #define vtiii vector<tiii> const int N = (109), MOD = 1e9 + 7, INF = int(1e18); int dp[N][2]; bool st[N], akt[N], wl[N]; vi graf[N]; void dfs(int u, int v){ akt[u] = st[u] ^ 1; dp[u][0] = 1; dp[u][1] = 1; wl[u] = st[u]; int mx = 0; for(auto i : graf[u]){ if(i == v) continue; dfs(i, u); wl[u] &= wl[i]; if(wl[i]) continue; akt[u] ^= 1; dp[u][0] += dp[i][0] + 1; mx = max(mx, dp[i][0] - dp[i][1] + 1); } dp[u][1] = dp[u][0] - mx; if(akt[u] == 0){ dp[u][0] += 3; }else{ dp[u][1] = min(dp[u][0], dp[u][1] + 3); } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); // random_device rd; // mt19937_64 gen(rd()); int n; cin >> n; string s; cin >> s; for(int i = 1; i <= n; i++) st[i] = (s[i - 1] == '1'); for(int i = 1; i < n; i++){ int a, b; cin >> a >> b; graf[a].pb(b); graf[b].pb(a); } int ans = INF; for(int i = 1; i <= n; i++){ dfs(i, i); ans = min({ans, dp[i][0], dp[i][1]}); } cout << ans << "\n"; 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...