제출 #1233352

#제출 시각아이디문제언어결과실행 시간메모리
1233352Sir_Ahmed_Imran봉쇄 시간 (IOI23_closing)C++17
0 / 100
1131 ms2101304 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; #define MAXN 100001 #define nl '\n' #define ff first #define ss second #define ll long long #define ld long double #define terminator main #define pll pair<ll,ll> #define append push_back #define pii pair<int,int> #define all(x) (x).begin(),(x).end() ll d[MAXN][2]; bool vis[MAXN]; vector<pii> a[MAXN]; void dfs(int v, int u, int t){ for(auto & [i, j] : a[v]){ if(i == u) continue; d[i][t] = d[v][t] + j; dfs(i, v, t); } } int max_score(int n, int X, int Y, ll K, vector<int> U, std::vector<int> V, vector<int> W){ ll k; int x; for(int i = 0; i < n - 1; i++){ a[V[i]].append({U[i], W[i]}); a[U[i]].append({V[i], W[i]}); } dfs(X, -1, 0); dfs(Y, -1, 1); vector<pll> v, u; for(int i = 0; i < n; i++){ v.append({min(d[i][0], d[i][1]), i}); u.append({max(d[i][0], d[i][1]), i}); } int ans = 0; sort(all(v)); sort(all(u)); for(int i = 0; i <= n; i++){ k = 0; x = i * 2; for(auto & j : v){ if(vis[j.ss]) continue; if(k + j.ff > K) break; k += j.ff; x++; } ans = max(ans, x); if(i == n) break; K -= u[i].ff; vis[u[i].ss] = 1; if(K < 0) break; } return ans; }
#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...