제출 #483502

#제출 시각아이디문제언어결과실행 시간메모리
483502Misuki경주 (Race) (IOI11_race)C++17
21 / 100
3064 ms12224 KiB
#include<bits/stdc++.h>

using namespace std;
using pii = pair<int, int>;

const int SIZE = 200000;
int n, k, ans = INT_MAX;
vector<pii> G[SIZE];
pii dis[SIZE];

int BFS(int S) {
  fill(dis, dis + n, make_pair(INT_MAX, INT_MAX));
  queue<int> q; //len, cost
  q.push(S);
  dis[S] = make_pair(0, 0);
  
  while(!q.empty()) {
    int now = q.front(); q.pop();
    int len = dis[now].first, cost = dis[now].second;
    for(auto [X, C] : G[now]) {
      if (dis[X].first == INT_MAX) {
        dis[X] = make_pair(len + 1, cost + C);
        q.push(X);
      }
    }
  }

  int tmp = INT_MAX;
  for(int i = 0; i < n; i++)
    if (dis[i].second == k)
      tmp = min(tmp, dis[i].first);
  return tmp;
}

int best_path(int N, int K, int H[][2], int L[]) {
  n = N, k = K;
  for(int i = 0; i < N - 1; i++) {
    G[H[i][0]].emplace_back(make_pair(H[i][1], L[i]));
    G[H[i][1]].emplace_back(make_pair(H[i][0], L[i]));
  }

  for(int i = 0; i < N; i++)
    ans = min(ans, BFS(i));
  return ans == INT_MAX ? -1 : ans;
}
/*
int A[SIZE - 1][2], B[SIZE - 1];
int main() {
  int a, b; cin >> a >> b;
  for(int i = 0; i < a - 1; i++)
    cin >> A[i][0] >> A[i][1];
  for(int i = 0; i < a - 1; i++)
    cin >> B[i];
  cout << best_path(a, b, A, B) << '\n';
}
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...