Submission #773037

#TimeUsernameProblemLanguageResultExecution timeMemory
773037davitmargPower Plant (JOI20_power)C++17
47 / 100
1461 ms39200 KiB
/* DavitMarg In pr honky-tonk, Down in Mexico */ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #include <map> #include <unordered_map> #include <set> #include <unordered_set> #include <queue> #include <bitset> #include <stack> #include <cassert> #include <iterator> #include <random> #include <chrono> #define mod 1000000007ll #define LL long long #define LD long double #define MP make_pair #define PB push_back #define all(v) v.begin(), v.end() #define fastIO ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); using namespace std; const int N = 500005; int n; string s; vector<int> g[N]; int dp[N]; int dfs(int v, int p, bool start = false) { dp[v] = s[v] - '0'; int sum = 0; int mx = 0; for(int i = 0; i < g[v].size(); i++) { int to = g[v][i]; if(to == p) continue; sum += dfs(to, v); mx = max(dp[to], mx); } dp[v] = max(dp[v], sum - (s[v] - '0')); if(start) dp[v] = max(dp[v], (s[v] - '0') + mx); return dp[v]; } LL myRand() { return ((LL)rand() << 16) + rand(); } void solve() { cin >> n; for(int i = 1; i <= n - 1; i++) { int a, b; cin >> a >> b; g[a].PB(b); g[b].PB(a); } cin>>s; s = '#' + s; int ans = 0; vector<int> p; for(int i = 1; i <= n; i++) { if(s[i] == '1') p.PB(i); if(g[i].size() == 1) { p.PB(i); p.PB(i); } } srand(69); int k = 2000; if(n > 5000) k = 39; for(int i = 0; i < k; i++) { int v = p[myRand() % p.size()]; ans = max(ans, dfs(v, -1, true)); } cout<<ans<<endl; } int main() { fastIO; int T = 1; //cin >> T; while (T--) { solve(); } return 0; } /* cd /mnt/d/Davit/Projects/VSCode; g++ -std=c++17 -O2 -Wall -Wextra -Ddeath -Wshadow source.cpp -o orz; ./orz; rm orz */

Compilation message (stderr)

power.cpp: In function 'int dfs(int, int, bool)':
power.cpp:45:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |     for(int i = 0; i < g[v].size(); i++)
      |                    ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...