Submission #587688

#TimeUsernameProblemLanguageResultExecution timeMemory
587688M_W도로 폐쇄 (APIO21_roads)C++17
7 / 100
2067 ms26828 KiB
#include <bits/stdc++.h> #define ii pair<long long, long long> using namespace std; vector<ii> adj[200002]; ii dfs(int a, int p, long long wt, int k){ long long sm = 0; priority_queue<long long, vector<long long>, greater<long long>> pq; for(auto [x, w]: adj[a]){ if(x == p) continue; ii res = dfs(x, a, w, k); sm += res.first; pq.push(res.second - res.first); } while(!pq.empty() && pq.top() < 0){ sm += pq.top(); pq.pop(); } while(pq.size() > k){ sm += pq.top(); pq.pop(); } ii res2 = {sm, sm + wt}; if(a != 0 && !pq.empty() && pq.size() == k) res2.first += pq.top(); return res2; } vector<long long> minimum_closure_costs(int N, vector<int> U, vector<int> V, vector<int> W) { vector<long long> ans(N, 0); bool st1 = true, st2 = true; for(int i = 0; i < N - 1; i++){ adj[U[i]].push_back({V[i], W[i]}); adj[V[i]].push_back({U[i], W[i]}); ans[0] += W[i]; if(U[i]) st1 = false; if(U[i] + 1 != V[i]) st2 = false; } if(st1){ priority_queue<long long> pq; for(int i = 0; i < N - 1; i++) pq.push(W[i]); for(int i = N - 1; i > 0; i--){ if(i < N - 1) ans[i] = ans[i + 1]; if(pq.size() > i){ ans[i] += pq.top(); pq.pop(); } } return ans; } if(st2){ ii res = dfs(0, 0, 0, 1); ans[1] = res.first; return ans; } for(int i = N - 1; i > 0; i--){ ii res = dfs(0, 0, 0, i); ans[i] = res.first; } return ans; }

Compilation message (stderr)

roads.cpp: In function 'std::pair<long long int, long long int> dfs(int, int, long long int, int)':
roads.cpp:18:18: warning: comparison of integer expressions of different signedness: 'std::priority_queue<long long int, std::vector<long long int>, std::greater<long long int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   18 |  while(pq.size() > k){
      |        ~~~~~~~~~~^~~
roads.cpp:22:40: warning: comparison of integer expressions of different signedness: 'std::priority_queue<long long int, std::vector<long long int>, std::greater<long long int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   22 |  if(a != 0 && !pq.empty() && pq.size() == k) res2.first += pq.top();
      |                              ~~~~~~~~~~^~~~
roads.cpp: In function 'std::vector<long long int> minimum_closure_costs(int, std::vector<int>, std::vector<int>, std::vector<int>)':
roads.cpp:44:17: warning: comparison of integer expressions of different signedness: 'std::priority_queue<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   44 |    if(pq.size() > i){
      |       ~~~~~~~~~~^~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...