#include "factories.h"
#include <bits/stdc++.h>
using namespace std;
template<typename T>
void out(T x) { cout << x << endl; exit(0); }
#define watch(x) cout << (#x) << " is " << (x) << endl
using ll = long long;
const ll inf = 1e18;
const ll mod = 1e9+7;
const int maxn = 1e6+10;
vector<pair<ll,int>> g[maxn];
const int LOG = 20;
int par[LOG+1][maxn];
int dep[maxn];
ll depw[maxn];
int n;
void dfs(int at, int p) {
if (~p) {
for (int j=1; j<LOG; j++) {
par[j][at] = par[j-1][par[j-1][at]];
}
}
for (auto ed: g[at]) {
int to = ed.second;
if (to == p) continue;
par[0][to] = at;
dep[to] = 1+dep[at];
depw[to] = ed.first+depw[at];
dfs(to, at);
}
}
int lca(int u, int v) {
if (dep[u]<dep[v]) swap(u, v);
int dx = dep[u]-dep[v];
for (int j=0; j<LOG; j++) {
if (dx>>j&1) {
u=par[j][u];
}
}
if (u==v) return v;
for (int j=LOG-1; j>=0; j--) {
if (par[j][u] != par[j][v]) {
u=par[j][u];
v=par[j][v];
}
}
return par[0][v];
}
ll dist(int u, int v) {
if (u==v) return 0;
int mid = lca(u,v);
return depw[u]+depw[v]-2ll*depw[mid];
}
void Init(int N, int A[], int B[], int D[]) {
n = N;
for (int i=0; i<N; i++) {
g[A[i]].push_back({D[i],B[i]});
g[B[i]].push_back({D[i],A[i]});
}
dfs(0, -1);
}
ll QuerySmall(int S, int X[], int T, int Y[]) {
ll res = inf;
for (int i=0; i<S; i++) {
for (int j=0; j<T; j++) {
//cout<<X[i]<<","<<Y[j]<<endl;
res = min(res, dist(X[i],Y[j]));
}
}
return res;
}
ll dp[maxn];
bool dest[maxn];
long long Query(int S, int X[], int T, int Y[]) {
if (S<=10 && T<=10) {
return QuerySmall(S, X, T, Y);
}
for (int i=0; i<n; i++) {
dp[i] = inf;
dest[i] = false;
}
for (int i=0; i<S; i++) {
dp[X[i]] = 0;
}
for (int i=0; i<T; i++) {
dest[Y[i]] = true;
}
priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> pq;
for (int i=0; i<S; i++) {
pq.push({0, X[i]});
}
while (pq.size()) {
auto cur = pq.top();
pq.pop();
int at = cur.second;
ll len = cur.first;
if (len > dp[at]) {
continue;
}
if (dest[at]) {
return len;
}
for (auto ed: g[at]) {
int to = ed.second;
ll wei = ed.first;
if (len+wei < dp[to]) {
dp[to] = len+wei;
pq.push({dp[to], to});
}
}
}
ll res = inf;
for (int i=0; i<T; i++) {
res = min(res, dp[Y[i]]);
}
return res;
}
int q;
int a[maxn], b[maxn], d[maxn];
int x[maxn], y[maxn];
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
24320 KB |
Output is correct |
2 |
Correct |
557 ms |
32888 KB |
Output is correct |
3 |
Correct |
546 ms |
32888 KB |
Output is correct |
4 |
Correct |
520 ms |
33008 KB |
Output is correct |
5 |
Correct |
486 ms |
33148 KB |
Output is correct |
6 |
Correct |
602 ms |
32988 KB |
Output is correct |
7 |
Correct |
528 ms |
32888 KB |
Output is correct |
8 |
Correct |
1356 ms |
33016 KB |
Output is correct |
9 |
Correct |
507 ms |
33180 KB |
Output is correct |
10 |
Correct |
590 ms |
32988 KB |
Output is correct |
11 |
Correct |
522 ms |
32760 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
19 ms |
24192 KB |
Output is correct |
2 |
Correct |
3165 ms |
107484 KB |
Output is correct |
3 |
Correct |
5948 ms |
109580 KB |
Output is correct |
4 |
Correct |
1948 ms |
123564 KB |
Output is correct |
5 |
Correct |
5368 ms |
147060 KB |
Output is correct |
6 |
Correct |
4918 ms |
129800 KB |
Output is correct |
7 |
Execution timed out |
8093 ms |
63196 KB |
Time limit exceeded |
8 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
29 ms |
24320 KB |
Output is correct |
2 |
Correct |
557 ms |
32888 KB |
Output is correct |
3 |
Correct |
546 ms |
32888 KB |
Output is correct |
4 |
Correct |
520 ms |
33008 KB |
Output is correct |
5 |
Correct |
486 ms |
33148 KB |
Output is correct |
6 |
Correct |
602 ms |
32988 KB |
Output is correct |
7 |
Correct |
528 ms |
32888 KB |
Output is correct |
8 |
Correct |
1356 ms |
33016 KB |
Output is correct |
9 |
Correct |
507 ms |
33180 KB |
Output is correct |
10 |
Correct |
590 ms |
32988 KB |
Output is correct |
11 |
Correct |
522 ms |
32760 KB |
Output is correct |
12 |
Correct |
19 ms |
24192 KB |
Output is correct |
13 |
Correct |
3165 ms |
107484 KB |
Output is correct |
14 |
Correct |
5948 ms |
109580 KB |
Output is correct |
15 |
Correct |
1948 ms |
123564 KB |
Output is correct |
16 |
Correct |
5368 ms |
147060 KB |
Output is correct |
17 |
Correct |
4918 ms |
129800 KB |
Output is correct |
18 |
Execution timed out |
8093 ms |
63196 KB |
Time limit exceeded |
19 |
Halted |
0 ms |
0 KB |
- |