Submission #1194283

#TimeUsernameProblemLanguageResultExecution timeMemory
1194283Ak_16Closing Time (IOI23_closing)C++20
0 / 100
83 ms28996 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; #define ll long long struct edg{ int no; int len; }; int tot1; vector<edg> adj[200005]; ll disa[210000]; ll disb[210000]; int vis[200005]; ll cos1[210000]; ll cos2[210000]; ll ne[210000]; 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++; } } return tot1; }
#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...