제출 #338466

#제출 시각아이디문제언어결과실행 시간메모리
338466boykutEvacuation plan (IZhO18_plan)C++14
0 / 100
4065 ms11376 KiB
#include <bits/stdc++.h>

using namespace std;

vector <int> par, siz;

int find_set(int v) {
   if (v == par[v]) return v;
   return par[v] = find_set(par[v]);
}

vector <int> d, used;
vector <pair<int,int>> g[100001];

int backtrack(int s, int t) {
   if (s == t) return d[t];
   int ans = -2e9;
   for (pair<int,int> i: g[s]) {
      int to = i.first;
      if (used[to]) continue;
      used[to] = 1;
      ans = max(ans, backtrack(to, t));
      used[to] = 0;
   }
   return min(d[s], ans);
}

void uni(int a, int b) {
   a = find_set(a);
   b = find_set(b);
   if (a != b) {
      if (siz[a] < siz[b])
         swap(a, b);
      siz[a] += siz[b];
      par[b] = a;
   }
}

signed main() {
   ios::sync_with_stdio(0);
   cin.tie(0);
   int n, m;
   cin >> n >> m;
   for (int i = 0; i < m; i++) {
      int u, v, cost;
      cin >> u >> v >> cost;
      g[u].push_back({v, cost});
      g[v].push_back({u, cost});
   }
   int k;
   cin >> k;
   vector <int> r(k);
   for (int i = 0; i < k; i++) {
      cin >> r[i];
   }
   priority_queue <pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> qw;
   used = vector <int> (1 + n, 0);
   d = vector <int> (1 + n, INT_MAX);
   for (int i = 0; i < k; i++) {
      qw.push({0, r[i]});
      d[r[i]] = 0;
   }
   while (!qw.empty()) {
      int v = qw.top().second;
      qw.pop();
      if (used[v]) continue;
      used[v] = 1;
      for (pair<int,int> i : g[v]) {
         int to = i.first, len = i.second;
         if (d[v] + len < d[to]) {
            d[to] = d[v] + len;
            qw.push({d[to], to});
         }
      }
   }
   int q;
   cin >> q;
   if (n <= 15 && m <= 200 && q <= 200) {
      for (int tmp = q; tmp--;) {
         int s, t;
         cin >> s >> t;
         used = vector <int> (1 + n, 0);
         cout << backtrack(s, t) << '\n';
      }
      return 0;
   }
   for (int tmp = q; tmp--;) {
      int s, t;
      cin >> s >> t;
      queue<int>q;
      q.push(s);  
   }
   return 0;
}
#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...