Submission #897669

#TimeUsernameProblemLanguageResultExecution timeMemory
897669ErJClosing Time (IOI23_closing)C++17
75 / 100
1121 ms2097152 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define vi vector<ll> #define vvi vector<vector<ll>> #define vs vector<string> #define vc vector<char> #define vb vector<bool> #define vp vector<pair<ll, ll>> #define pp pair<ll, ll> #define qi queue<ll> #define qp queue<pp> #define pqi priority_queue<ll> #define pqp priority_queue<pp> #define mi map<ll, ll> #define mpi map<pp, ll> #define mip map<ll, pp> #define mpp map<pp, pp> #define mb map<ll, bool> #define si set<ll> #define sp set<pp> #define mod 1000000007 #define rep(a, b) for(int a = 0; a < (b); a++) #define rep2(a, b) for(int a = 1; a < (b); a++) #define inf 1000000000000000000 int max_score(int N, int X, int Y, ll K, vector<int> U, vector<int> V, vector<int> W) { vector<ll> distX(N); vector<ll> distY(N); vector<ll> distXY(N); vector<ll> distXY2(N), distXY3(N); distX[X] = 0; distX[Y] = 0; vector<vp> edges(N); rep(i, U.size()) { edges[U[i]].push_back({ V[i], W[i] }); edges[V[i]].push_back({ U[i], W[i] }); } queue<int> q; vb was(N); rep(i, N) was[i] = false; q.push(X); vector<int> from(N); from[X] = -1; while (!q.empty()) { ll u = q.front(); was[u] = true; q.pop(); for (int i = 0; i < edges[u].size(); i++) { ll v = edges[u][i].first; ll dw = edges[u][i].second; if (!was[v]) { q.push(v); from[v] = u; distX[v] = distX[u] + dw; } } } rep(i, N) was[i] = false; queue<int> q2; q2.push(Y); while (!q2.empty()) { ll u = q2.front(); was[u] = true; q2.pop(); for (int i = 0; i < edges[u].size(); i++) { ll v = edges[u][i].first; ll dw = edges[u][i].second; if (!was[v]) { q2.push(v); distY[v] = distY[u] + dw; } } } vector<bool> mainLine(N); rep(i, N) mainLine[i] = false; int akt = Y; while (akt != -1) { mainLine[akt] = true; akt = from[akt]; } for (int i = 0; i < N; i++) { distXY[i] = max(distX[i], distY[i]); distXY2[i] = min(distX[i], distY[i]); distXY3[i] = distXY2[i]; } sort(distXY3.begin(), distXY3.end()); ll anslvl1 = 0; ll sum = 0; rep(i, distXY3.size()) { sum += distXY3[i]; if (sum <= K) { anslvl1++; } } vvi dp(N + 1); dp[0].resize(2*N + 1); for (int i = 0; i < 2 * N + 1; i++) { dp[0][i] = inf; } dp[0][0] = 0; for (int i = 1; i < dp.size(); i++) { dp[i].resize(2 * N + 1); if (!mainLine[i-1]) { for (int j = 0; j < 2 * N + 1; j++) { dp[i][j] = dp[i - 1][j]; } } else { for (int j = 0; j < 2 * N + 1; j++) { dp[i][j] = inf; } } for (int j = 0; j < 2 * N + 1; j++) { if (dp[i - 1][j] != inf) { dp[i][j + 1] = min(dp[i][j + 1], dp[i - 1][j] + distXY2[i - 1]); dp[i][j + 2] = min(dp[i][j + 2], dp[i - 1][j] + distXY[i - 1]); } } } ll ans = 0; for (int i = 2 * N; i >= 0; i--) { if (dp[N][i] <= K) { ans = i; break; } } return max(ans, anslvl1); }

Compilation message (stderr)

closing.cpp: In function 'int max_score(int, int, int, long long int, std::vector<int>, std::vector<int>, std::vector<int>)':
closing.cpp:24:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 | #define rep(a, b) for(int a = 0; a < (b); a++)
      |                                    ^
closing.cpp:37:5: note: in expansion of macro 'rep'
   37 |     rep(i, U.size()) {
      |     ^~~
closing.cpp:51:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |         for (int i = 0; i < edges[u].size(); i++) {
      |                         ~~^~~~~~~~~~~~~~~~~
closing.cpp:68:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |         for (int i = 0; i < edges[u].size(); i++) {
      |                         ~~^~~~~~~~~~~~~~~~~
closing.cpp:24:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 | #define rep(a, b) for(int a = 0; a < (b); a++)
      |                                    ^
closing.cpp:93:5: note: in expansion of macro 'rep'
   93 |     rep(i, distXY3.size()) {
      |     ^~~
closing.cpp:105:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |     for (int i = 1; i < dp.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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...