Submission #294253

#TimeUsernameProblemLanguageResultExecution timeMemory
294253DenisovPower Plant (JOI20_power)C++14
100 / 100
210 ms29752 KiB
#include <bits/stdc++.h> #include <ext/rope> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> //#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#define int long long #define pb push_back #define x first #define y second #define mk(a,b) make_pair(a,b) #define rr return 0 #define sqr(a) ((a)*(a)) #define all(a) (a).begin(), (a).end() #define sz(a) (int)(a).size() using namespace std; using namespace __gnu_cxx; using namespace __gnu_pbds; using ll = long long; using ld = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; template<class value, class cmp = less<value> > using ordered_set = tree<value, null_type, cmp, rb_tree_tag, tree_order_statistics_node_update>; template<class value, class cmp = less_equal<value> > using ordered_multiset = tree<value, null_type, cmp, rb_tree_tag, tree_order_statistics_node_update>; template<class key, class value, class cmp = less<key> > using ordered_map = tree<key, value, cmp, rb_tree_tag, tree_order_statistics_node_update>; /// find_by_order() /// order_of_key() mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); inline int randll(int l = INT_MIN, int r = INT_MAX) { return uniform_int_distribution<int>(l, r)(rng); } const int INF = 1e9, MOD = 1e9 + 7; /// think const ll LINF = 1e18; const int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0}; inline bool inside (int x, int y, int n, int m) { return 0 <= x && 0 <= y && x < n && y < m; } template<class T> bool umin (T &a, T b) {return a > b ? (a = b, true) : false; } template<class T> bool umax (T &a, T b) {return a < b ? (a = b, true) : false; } vector <vector <int> > edge; string s; vector <int> dp[2]; inline void dfs (int v, int p = -1) { dp[0][v] = s[v] == '1'; dp[1][v] = 0; int sum = 0; for (int to : edge[v]) { if (to != p) { dfs(to, v); umax(dp[1][v], dp[1][to]); if (s[v] == '1') { umax(dp[1][v], dp[0][to] + 1); } sum += dp[0][to]; } } umax(dp[0][v], sum - bool(s[v] == '1')); } main() { ios::sync_with_stdio(0); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; edge.resize(n); dp[0].resize(n); dp[1].resize(n); for (int i = 1, a, b; i < n; i++) { cin >> a >> b; --a, --b; edge[a].pb(b); edge[b].pb(a); } cin >> s; dfs(0); cout << max(dp[0][0], dp[1][0]) << '\n'; }

Compilation message (stderr)

power.cpp:71:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   71 | main()
      |      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...