Submission #947241

# Submission time Handle Problem Language Result Execution time Memory
947241 2024-03-15T18:29:16 Z nguyennh Evacuation plan (IZhO18_plan) C++14
22 / 100
322 ms 524288 KB
#include<bits/stdc++.h>
#define el '\n'
using namespace std ;

mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());

const int MN = 1e5 + 5;
const int inf = 1e9;

vector<pair<int , int>> adj[MN];

struct DSU{
  vector<int> par , sz;
  int n;
  
  void init(int n){
    this -> n = n;
    par.resize(n + 5);
    sz.resize(n + 5 , 1);
    for ( int i = 1 ; i <= n ; i++ ) par[i] = i;
  }
  
  int find_set(int v){
    return v == par[v] ? v : par[v] = find_set(par[v]);
  }
  
  void unite(int r , int s){
    r = find_set(r) , s = find_set(s);
    if (r != s){
      if (sz[r] < sz[s]) swap(r , s);
      par[s] = r;
      sz[r] += sz[s];
    }
  }
  
  bool same_set(int u , int v){
    return find_set(u) == find_set(v);
  }
};

int32_t main (){
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n , m;
  cin >> n >> m;
  vector<pair<int , pair<int , int>>> edge(m);
  for ( int i = 0 ; i < m ; i++ ){
    int u , v , w;
    cin >> u >> v >> w;
    adj[u].push_back(make_pair(v , w));
    adj[v].push_back(make_pair(u , w));
    edge[i].second = make_pair(u , v);
  }
  priority_queue<pair<int , int> , vector<pair<int , int>> , greater<pair<int , int>>> pq;
  vector<int> dis(n + 5 , inf);
  int k;
  cin >> k;
  for ( int i = 1 ; i <= k ; i++ ){
    int x;
    cin >> x;
    dis[x] = 0;
    pq.push(make_pair(0 , x));
  }
  while (!pq.empty()){
    auto [d , u] = pq.top();
    pq.pop();
    if (d != dis[u]) continue;
    for ( auto [v , w] : adj[u] ){
      if (dis[v] > dis[u] + w){
        dis[v] = dis[u] + w;
        pq.push(make_pair(dis[v] , v));
      }
    }
  }
  int mn = *min_element(dis.begin() + 1 , dis.begin() + n + 1);
  int mx = *max_element(dis.begin() + 1 , dis.begin() + n + 1);
  for ( int i = 0 ; i < m ; i++ ) edge[i].first = min(dis[edge[i].second.first] , dis[edge[i].second.second]);
  int q;
  cin >> q;
  vector<pair<int , int>> queries(q);
  for ( int i = 0 ; i < q ; i++ ){
    cin >> queries[i].first >> queries[i].second;
  }
  sort(edge.begin() , edge.end());
  vector<int> l(q + 5 , mn) , r(q + 5 , mx);
  vector<vector<int>> candidates(mx + 5);
  DSU dsu;
  while (1){
    bool any = false;
    for ( int i = 0 ; i < q ; i++ ){
      if (l[i] <= r[i]){
        int mid = (l[i] + r[i]) / 2;
        candidates[mid].push_back(i);
        any = true;
      }
    }
    if (!any) break;
    dsu.init(n);
    int j = edge.size() - 1;
    for ( int mid = mx ; mid >= mn ; mid-- ){
      while (j >= 0 && edge[j].first >= mid){
        dsu.unite(edge[j].second.first , edge[j].second.second);
        j--;
      }
      for ( auto x : candidates[mid] ){
        if (dsu.same_set(queries[x].first , queries[x].second)){
          l[x] = mid + 1;
        }
        else r[x] = mid - 1;
      }
      candidates[mid].clear();
    }
  }
  for ( int i = 0 ; i < q ; i++ ) cout << r[i] << el;
}

Compilation message

plan.cpp: In function 'int32_t main()':
plan.cpp:65:10: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   65 |     auto [d , u] = pq.top();
      |          ^
plan.cpp:68:16: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   68 |     for ( auto [v , w] : adj[u] ){
      |                ^
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Correct 1 ms 2908 KB Output is correct
3 Correct 1 ms 2908 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 2 ms 2908 KB Output is correct
6 Correct 1 ms 2908 KB Output is correct
7 Correct 2 ms 2908 KB Output is correct
8 Correct 1 ms 2652 KB Output is correct
9 Correct 3 ms 3080 KB Output is correct
10 Correct 2 ms 2908 KB Output is correct
11 Correct 2 ms 3152 KB Output is correct
12 Correct 2 ms 2908 KB Output is correct
13 Correct 2 ms 3076 KB Output is correct
14 Correct 3 ms 3164 KB Output is correct
15 Correct 2 ms 3080 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Correct 1 ms 2908 KB Output is correct
3 Correct 1 ms 2908 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 2 ms 2908 KB Output is correct
6 Correct 1 ms 2908 KB Output is correct
7 Correct 2 ms 2908 KB Output is correct
8 Correct 1 ms 2652 KB Output is correct
9 Correct 3 ms 3080 KB Output is correct
10 Correct 2 ms 2908 KB Output is correct
11 Correct 2 ms 3152 KB Output is correct
12 Correct 2 ms 2908 KB Output is correct
13 Correct 2 ms 3076 KB Output is correct
14 Correct 3 ms 3164 KB Output is correct
15 Correct 2 ms 3080 KB Output is correct
16 Correct 117 ms 18764 KB Output is correct
17 Correct 322 ms 37028 KB Output is correct
18 Correct 25 ms 5968 KB Output is correct
19 Correct 78 ms 17992 KB Output is correct
20 Correct 315 ms 37140 KB Output is correct
21 Correct 163 ms 22736 KB Output is correct
22 Runtime error 188 ms 524288 KB Execution killed with signal 9
23 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2648 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
3 Correct 1 ms 2652 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 1 ms 2652 KB Output is correct
6 Correct 1 ms 2652 KB Output is correct
7 Correct 1 ms 2652 KB Output is correct
8 Correct 1 ms 2652 KB Output is correct
9 Correct 1 ms 2808 KB Output is correct
10 Correct 1 ms 2652 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 135 ms 13352 KB Output is correct
2 Correct 291 ms 24908 KB Output is correct
3 Correct 280 ms 24828 KB Output is correct
4 Runtime error 179 ms 524288 KB Execution killed with signal 9
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Correct 1 ms 2908 KB Output is correct
3 Correct 1 ms 2908 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 2 ms 2908 KB Output is correct
6 Correct 1 ms 2908 KB Output is correct
7 Correct 2 ms 2908 KB Output is correct
8 Correct 1 ms 2652 KB Output is correct
9 Correct 3 ms 3080 KB Output is correct
10 Correct 2 ms 2908 KB Output is correct
11 Correct 2 ms 3152 KB Output is correct
12 Correct 2 ms 2908 KB Output is correct
13 Correct 2 ms 3076 KB Output is correct
14 Correct 3 ms 3164 KB Output is correct
15 Correct 2 ms 3080 KB Output is correct
16 Correct 117 ms 18764 KB Output is correct
17 Correct 322 ms 37028 KB Output is correct
18 Correct 25 ms 5968 KB Output is correct
19 Correct 78 ms 17992 KB Output is correct
20 Correct 315 ms 37140 KB Output is correct
21 Correct 163 ms 22736 KB Output is correct
22 Runtime error 188 ms 524288 KB Execution killed with signal 9
23 Halted 0 ms 0 KB -