Submission #1184319

#TimeUsernameProblemLanguageResultExecution timeMemory
1184319GrayPower Plant (JOI20_power)C++20
100 / 100
88 ms29032 KiB
#include <bits/stdc++.h> using namespace std; #define ll int #define ull unsigned long long #define ld long double #define ff first #define ss second #define ln "\n" #define mp make_pair #define pb push_back #define INF (ll)2e18 #define MOD (ll)(1e9+7) vector<vector<ll>> A; string s; vector<ll> dp; void dfs(ll u, ll p, ll &res){ ll ret=0, mx=0; for (auto v:A[u]){ if (v==p) continue; dfs(v, u, res); mx=max(mx, dp[v]); ret+=dp[v]; } dp[u] = max((ll)(s[u]=='1'), ((ret==0)?s[u]=='1':ret-(s[u]=='1'))); res=max(res, mx+(s[u]=='1')); res=max(res, dp[u]); } void solve(){ ll n; cin >> n; A.resize(n+1); dp.resize(n+1); for (ll i=0; i<n-1; i++){ ll u, v; cin >> u >> v; A[u].push_back(v); A[v].push_back(u); } cin >> s; s="$"+s; ll res=0; dfs(1, 1, res); cout << res << ln; } /* 9-2 101110010001 */ int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); #ifdef LOCAL auto start = chrono::high_resolution_clock::now(); #endif ll t=1; // cin >> t; for (ll c=1; c<=t; c++) solve(); #ifdef LOCAL auto duration = chrono::duration_cast<chrono::microseconds>(chrono::high_resolution_clock::now() - start); cout << setprecision(0) << fixed << "time: " << (double)duration.count()/1000.0 << " milliseconds" << endl; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...