Submission #1023785

#TimeUsernameProblemLanguageResultExecution timeMemory
1023785dozerDreaming (IOI13_dreaming)C++14
18 / 100
34 ms23132 KiB
#include <bits/stdc++.h> using namespace std; #include "dreaming.h" #define sp " " #define endl "\n" #define pb push_back #define pii pair<int, int> #define st first #define nd second #define fileio() freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout) #define fastio() cin.tie(0), ios_base::sync_with_stdio(0) #define mid (l + r) / 2 #define LL node * 2 #define RR node * 2 + 1 #define ll long long #define MAXN 300005 const int modulo = 1e9 + 7; const ll INF = 2e18 + 7; int maks[MAXN], sub_maks[MAXN], vis[MAXN]; vector<pii> adj[MAXN]; int dfs2(int node, int root){ int ans = 0; for (auto i : adj[node]){ if (i.st == root) continue; ans = max(ans, dfs2(i.st, node) + i.nd); } return sub_maks[node] = ans; } int dfs(int node, int root, int m){ vis[node] = 1; maks[node] = max(m, sub_maks[node]); int ans = maks[node]; vector<array<int, 3>> v; for (auto i : adj[node]){ if (i.st == root) continue; v.pb({sub_maks[i.st] + i.nd, i.st, i.nd}); } sort(v.begin(), v.end()); for (int i = 0; i < v.size(); i++){ int to = v[i][1], w = v[i][2]; int add = m; if (i + 1 < v.size()) add = max(add, v.back()[0]); else add = max(add, v[v.size() - 2][0]); ans = min(ans, dfs(to, node, add + w)); } return ans; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for (int i = 0; i < M; i++){ A[i]++, B[i]++; adj[A[i]].pb({B[i], T[i]}); adj[B[i]].pb({A[i], T[i]}); } priority_queue<int> q; for (int i = 1; i <= N; i++){ if (vis[i]) continue; int tmp = dfs2(i, 0); int to = dfs(i, 0, 0); q.push(to); } int ans = 0; while(!q.empty()){ int a = q.top(); q.pop(); if (q.empty()) break; int b = q.top(); q.pop(); int neww = max(a, b + L); ans = max(ans, a + b + L); q.push(neww); } return ans; }

Compilation message (stderr)

dreaming.cpp: In function 'int dfs(int, int, int)':
dreaming.cpp:48:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |  for (int i = 0; i < v.size(); i++){
      |                  ~~^~~~~~~~~~
dreaming.cpp:51:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |   if (i + 1 < v.size()) add = max(add, v.back()[0]);
      |       ~~~~~~^~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:69:10: warning: unused variable 'tmp' [-Wunused-variable]
   69 |      int tmp = dfs2(i, 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...
#Verdict Execution timeMemoryGrader output
Fetching results...