Submission #1078304

#TimeUsernameProblemLanguageResultExecution timeMemory
1078304Dan4LifeClosing Time (IOI23_closing)C++17
0 / 100
845 ms47044 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define sz(a) (int)a.size() #define all(a) begin(a),end(a) using ll = long long; using ar = array<ll,2>; using vi = vector<ll>; const int mxN = (int)3e5+10; const ll LINF = (ll)2e18; ar a[mxN]; ll n, dis[2][mxN], dp[3010][6010]; vector<pair<int,ll>> adj[mxN]; void dfs(int s, int p, int t){ for(auto [u,w] : adj[s]){ if(u==p) continue; dis[t][u] = dis[t][s]+w; dfs(u,s,t); } } int max_score(int N, int X, int Y, ll K, vector<int> U, vector<int> V, vector<int> W){ n = N; int ans = 0; for(int i = 0; i <= n; i++) adj[i].clear(), dis[0][i]=dis[1][i]=0; for(int i = 0; i < sz(U); i++){ auto [a,b,c] = tie(U[i],V[i],W[i]); adj[a].pb({b,c}), adj[b].pb({a,c}); } dfs(X,-1,0); dfs(Y,-1,1); vi v; v.clear(); for(int i = 0; i < n; i++){ ll mn = min(dis[0][i],dis[1][i]); ll mx = max(dis[0][i],dis[1][i]); a[i][0] = mn, a[i][1] = mx; v.pb(mn), v.pb(mx); } if(n>3000){ ll D = 0; int i = 0; sort(all(v)); for(auto u : v){ D+=u; if(D>K) return i; i++; } return 2*n; } for(int i = 0; i <= n; i++) for(int j = 0; j <= 2*n+4; j++) dp[i][j] = LINF; dp[0][0] = 0; for(int i = 0; i < n; i++){ for(int j = 0; j <= 2*n; j++){ if(dis[0][i]+dis[1][i]!=dis[0][Y]) dp[i+1][j] = min(dp[i+1][j], dp[i][j]); for(int k : {0,1}) dp[i+1][j+k+1] = min(dp[i+1][j+k+1], dp[i][j]+a[i][k]); } } for(int i = 2*n; i>=0; i--) if(dp[n][i]<=K) return i; return 0; }

Compilation message (stderr)

closing.cpp: In function 'int max_score(int, int, int, ll, std::vector<int>, std::vector<int>, std::vector<int>)':
closing.cpp:25:13: warning: unused variable 'ans' [-Wunused-variable]
   25 |  n = N; int ans = 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...