제출 #1194277

#제출 시각아이디문제언어결과실행 시간메모리
1194277Ak_16Closing Time (IOI23_closing)C++20
0 / 100
32 ms5188 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; #define ll long long struct edg{ int no; int len; }; int tot1; int tot2; vector<edg> adj[5000]; ll disa[5000]; ll disb[5000]; int vis[5000]; ll dp[3005][6005]; ll cos1[5000]; ll cos2[5000]; ll ne[5000]; void dfs1(int nod, int di){ vis[nod] = 1; disa[nod] = di; for(auto edge : adj[nod]){ int n1 = edge.no; int n2 = edge.len; if(vis[n1]==0){ dfs1(n1, di+n2); } } } void dfs2(int nod, int di){ vis[nod] = 1; disb[nod] = di; for(auto edge : adj[nod]){ int n1 = edge.no; int n2 = edge.len; if(vis[n1]==0){ dfs2(n1, di+n2); } } } int max_score(int n, int x, int y, ll k, vector<int> u, vector<int> v, vector<int> w){ for(int i=0; i<n-1; i++){ adj[u[i]].emplace_back(edg{v[i],w[i]}); adj[v[i]].emplace_back(edg{u[i],w[i]}); } for(int i=0; i<n; i++){ vis[i]=0; disa[i]=0; disb[i]=0; } dfs1(x, 0); for(int i=0; i<n; i++){ vis[i]=0; } dfs2(y,0); for(int i=0; i<n; i++){ cos1[i] = min(disa[i], disb[i]); cos2[i] = max(disa[i], disb[i]); } for(int i=0; i<n; i++){ ne[i] = cos1[i]; } sort(ne, ne+n); tot1=0; ll sm=0; for(int i=0; i<n; i++){ if(sm+ne[i]<=k){ sm += ne[i]; tot1++; } } tot2=0; for(int i=0; i<=n; i++){ for(int j=0; j<=2*n; j++){ dp[i][j] = k+1; } } dp[0][0]=0; for(int i=0; i<n; i++){ for(int j=0; j<=2*i; j++){ dp[i+1][j+1] = min(dp[i][j+1], dp[i][j] + cos1[i]); dp[i+1][j+2] = min(dp[i][j+2], dp[i][j] + cos2[i]); if(disa[i]+disb[i]>disb[y]){ dp[i+1][j] = min(dp[i+1][j], dp[i][j]); } } } for(int i=1; i<=2*n; i++){ if(dp[n][i]<=k){ tot2 = i; } } return max(tot1, tot2); }
#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...