제출 #464214

#제출 시각아이디문제언어결과실행 시간메모리
464214ezdp경주 (Race) (IOI11_race)C++14
9 / 100
3085 ms22028 KiB
#pragma GCC target ("sse4") #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") #include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #define endl '\n' #define pb push_back #define fr first #define sc second #define ll long long int #define ld long double #define bit(idx) idx&(-idx) #define bin(x) bitset<32>(x).to_string() #define all(A) A.begin(), A.end() #define de(x) cout << #x << " = " << x << endl; using namespace std; using namespace __gnu_pbds; template<class T> using oset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; template<class T> using matrix = vector<vector<T>>; /// find_by_order(x) -> x-th element in the set /// order_of_key(x) -> how many elements are smaller than x /// insert(x) -> inserts x into the set const ll MAXN = 2e5 + 5; const ll MAXK = 1e6 + 6; const ll INF = 1e16 + 16; ll n, k, ans = INF, used[MAXN], sz[MAXN], mn[MAXK]; matrix<pair<ll, ll>> G; vector<pair<ll, ll>> upds; void dfs(ll u, ll p, ll len, ll depth){ if(len > k) return; ans = min(ans, mn[k - len] + depth); upds.pb({len, depth}); for(auto [v, l] : G[u]){ if(!used[v] && v != p){ dfs(v, u, len + l, depth + 1); } } } ll find_size(ll u, ll p = -1){ if(!used[u]) return 0; sz[u] = 1; for(auto [v, l] : G[u]){ if(v != p && !used[v]){ sz[u] += find_size(v, u); } } return sz[u]; } ll find_centroid(ll u, ll p, ll cn){ for(auto [v, l] : G[u]){ if(sz[v] > cn / 2 && v != p && !used[v]){ return find_centroid(v, u, cn); } } return u; } void init_centroid(ll u = 1, ll p = -1){ find_size(u); ll c = find_centroid(u, -1, sz[u]); mn[0] = 0; for(auto [v, l] : G[c]){ if(!used[v]){ dfs(v, c, l, 1); for(auto [x, v] : upds) mn[x] = min(mn[x], v); } } used[c] = true; for(auto [x, l] : upds) mn[x] = INF; for(auto [v, l] : G[c]){ if(!used[v]){ init_centroid(v, c); } } } int best_path(int N, int K, int h[][2], int L[]){ n = N; k = K; G = matrix<pair<ll, ll>>(n + 1); for(int i = 0; i < n - 1; i ++){ G[h[i][0]].pb({h[i][1], L[i]}); G[h[i][1]].pb({h[i][0], L[i]}); } for(int i = 0; i < MAXK; i ++) mn[i] = INF; init_centroid(); return (ans == INF ? -1 : ans); } /** int main(){ int N, K; cin >> N >> K; int h[N][2], L[N]; for(int i = 0; i < N - 1; i ++) cin >> h[i][0] >> h[i][1] >> L[i]; cout << best_path(N, K, h, L) << endl; } */

컴파일 시 표준 에러 (stderr) 메시지

race.cpp:3: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("O3")
      | 
race.cpp:4: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    4 | #pragma GCC optimization ("unroll-loops")
      | 
race.cpp: In function 'void dfs(long long int, long long int, long long int, long long int)':
race.cpp:41:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   41 |  for(auto [v, l] : G[u]){
      |           ^
race.cpp: In function 'long long int find_size(long long int, long long int)':
race.cpp:51:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   51 |  for(auto [v, l] : G[u]){
      |           ^
race.cpp: In function 'long long int find_centroid(long long int, long long int, long long int)':
race.cpp:60:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   60 |  for(auto [v, l] : G[u]){
      |           ^
race.cpp: In function 'void init_centroid(long long int, long long int)':
race.cpp:73:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   73 |  for(auto [v, l] : G[c]){
      |           ^
race.cpp:76:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   76 |    for(auto [x, v] : upds) mn[x] = min(mn[x], v);
      |             ^
race.cpp:81:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   81 |  for(auto [x, l] : upds) mn[x] = INF;
      |           ^
race.cpp:83:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   83 |  for(auto [v, l] : G[c]){
      |           ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...