Submission #1275366

#TimeUsernameProblemLanguageResultExecution timeMemory
1275366rafsanamin2020Race (IOI11_race)C++20
9 / 100
3095 ms1576 KiB
#include "race.h"
#include <bits/stdc++.h>

using namespace std;

int MX = 1200;

vector<vector<pair<int, int>>> adj(MX);

vector<bool> visited(MX, false);

pair<bool, int> dfs(int x, int y, int K, int l = 0, int nh = 0)
{
  if (visited[x])
  {
    return {false, nh};
  }

  if (x == y && l == K)
  {
    return {true, nh};
  }

  visited[x] = true;

  for (pair<int, int> v : adj[x])
  {
    pair<bool, int> ret = dfs(v.first, y, K, l + v.second, nh + 1);

    // cout << x << " " << y << " " << ret.first << " " << ret.second << "__________" << "\n";
    if (ret.first)
    {
      return {true, ret.second};
    }
  }

  return {false, nh};
}

int best_path(int N, int K, int H[][2], int L[])
{

  for (int i = 0; i < N - 1; i++)
  {
    adj[H[i][0]].push_back({H[i][1], L[i]});
    adj[H[i][1]].push_back({H[i][0], L[i]});
  }

  int ans = -1;

  for (int i = 0; i < N; i++)
  {
    for (int j = i + 1; j < N; j++)
    {
      visited = vector<bool>(MX, false);
      pair<bool, int>
          ret = dfs(i, j, K);

      // cout << i << " " << j << " " << ret.first << " " << ret.second << " \n";

      if (ret.first)
      {
        if (ans == -1)
        {
          ans = ret.second;
        }
        else
        {
          ans = min(ans, ret.second);
        }
      }
    }
  }

  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...