Submission #1157642

#TimeUsernameProblemLanguageResultExecution timeMemory
1157642zhasyn공장들 (JOI14_factories)C++20
0 / 100
8092 ms56072 KiB
#include "factories.h"
#include <bits/stdc++.h>
#define pb push_back
#define pf push_front
using namespace std;
#define F first
#define S second
typedef long long ll;
#define pii pair <int, int>
#define pll pair <ll, ll>
typedef long double ld;
const ll N = 5 * 1e5 + 100, M = 4096 + 10, len = 21, inf = 1e18;
const ll mod = 1e9 + 7;
ll um(ll a, ll b){
	return (1LL * a * b) % mod;
}
ll subr(ll a, ll b){
	return ((1LL * a - b) % mod + mod) % mod;
}
int n;
ll dis[N];
vector <pll> q[N];
void Init(int nx, int a[], int b[], int d[]) {
	n = nx;
	for(int i = 0; i < n - 1; i++){
		q[a[i]].pb(make_pair(b[i], d[i]));
		q[b[i]].pb(make_pair(a[i], d[i]));
	}
}

long long Query(int s, int x[], int t, int y[]) {
  for(int i = 0; i < n; i++){
  	dis[i] = INT_MAX;
  }
  set <pll> st;
  for(int i = 0; i < s; i++){
  	dis[x[i]] = 0;
  	st.insert(make_pair(0, x[i]));
  }
  while((ll)st.size() != 0){
  	ll v = st.begin()->S;
  	st.erase(st.begin());
  	for(int i = 0; i < (int)q[v].size(); i++){
  		pll u = q[v][i];
  		if(dis[u.F] > dis[v] + u.S){
  			st.erase(make_pair(dis[u.F], u.F));
  			dis[u.F] = dis[v] + u.S;
  			st.insert(make_pair(dis[u.F], u.F));
		}
	}
  }
  ll ans = LLONG_MAX;
  for(int i = 0; i < t; i++){
  	ans = min(ans, dis[y[i]]);
  }
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...