/**
SXR0aXAkI0JwbXptI3FhI3Z3I293bCNqY2IjUG0jMCNicG0jVHFkcXZvLyNCcG0jQW10bjBhY2phcWFicXZvLyNNYm16dml0MSNWdyNhdGN1am16I2tpdiNhbXF9bSNQcXUjVnd6I0F0bW14MSNQcWEjaXptI2l0dCNicHF2b2EjUXYjYnBtI3BtaWRtdmEjaXZsI3d2I21pemJwMSNFcHcjcWEjYnBtem0ja2l2I3F2Ym16a21sbSNRdiNQcWEjeHptYW12a20jbXtrbXhiI0lhI3BtI3htenVxYmJtYnBHI1BtI3N2d2VtYnAjRXBpYiMraXh4bWl6bWJwI2J3I1BxYSNrem1pYmN6bWEjSWEsI0ptbnd6bSN3eiNJbmJteiN3eiNKbXBxdmwjYnBtdTEjVnd6I2FwaXR0I2JwbXwja3d1eGlhYSNJY29wYiN3biNwcWEjc3Z3ZXRtbG9tI017a214YiNpYSNQbSNlcXR0bWJwMSNQcWEjYnB6d3ZtI2x3YnAjbXtibXZsI1dkbXojYnBtI3BtaWRtdmEjSXZsI3d2I21pemJwLyNpdmwjUG0jbm1tdG1icCNWdyNuaWJxb2NtI3F2I29jaXpscXZvI0l2bCN4em1hbXpkcXZvI2JwbXUvI053eiNQbSNxYSNicG0jVXdhYiNQcW9wMSNCcG0jQWN4em11bSMrcXYjb3R3enwsMQ==
*/
#include <bits/stdc++.h>
#define F first
#define S second
#define endl '\n'
#define pb push_back
const long long MOD = 1e9 + 7;
const long long MAXN = 1e6 + 1;
using namespace std;
typedef long long ll;
long long readInt() {
bool minus1 = false;
long long result = 0;
char ch;
ch = getchar();
while (true) {
if (ch == '-') break;
if (ch >= '0' && ch <= '9') break;
ch = getchar();
}
if (ch == '-') minus1 = true; else result = ch-'0';
while (true) {
ch = getchar();
if (ch < '0' || ch > '9') break;
result = result*10 + (ch - '0');
}
if (minus1)
return -result;
else
return result;
}
int p[MAXN];
int rnk[MAXN];
int up[MAXN][18];
int mn[MAXN][18];
vector <pair <int, int> > g[MAXN];
int lvl[MAXN];
bool used[MAXN];
int d[MAXN];
int tin[MAXN];
int tout[MAXN];
int get(int v){
if(p[v] == v) return v;
return p[v] = get(p[v]);
}
bool Merge(int a,int b){
a = get(a);
b = get(b);
if(a == b) return 0;
if(rnk[a] > rnk[b]) swap(a,b);
rnk[b] += rnk[a];
p[a] = b;
return 1;
}
int timer = 0;
void dfs(int v, int par) {
tin[v] = ++timer;
lvl[v] = lvl[par] + 1;
for (auto i : g[v]) {
if (i.first != par) {
up[i.first][0] = v;
mn[i.first][0] = i.second;
dfs(i.first, v);
}
}
tout[v] = timer;
}
bool in(int u,int v){
return (tin[u] <= tin[v] && tout[u] >= tout[v]);
}
int lca(int u,int v){
if(in(u,v)) return u;
if(in(v,u)) return v;
for(int i = 17; i >= 0; i--){
if(up[v][i] != -1 && !in(up[v][i], u)) v = up[v][i];
}
return up[v][0];
}
int get(int v,int u){
if(v == u) return 1e9;
int res = 1e9;
for(int i = 17; i >= 0; i--){
if(up[v][i] != -1 && !in(up[v][i], u)){
res = min(res, mn[v][i]);
v = up[v][i];
}
}
return min(res, mn[v][0]);
}
int get_min(int u,int v){
int l = lca(u,v);
return min(get(u,l), get(v,l));
}
int main() {
#ifdef IZI_KATKA
assert(freopen("input", "r", stdin));
assert(freopen("output", "w", stdout));
#endif
int n = readInt(), m = readInt();
vector <pair <int, pair <int, int> > > vec;
for (int i = 1; i <= m; i++) {
int u = readInt(), v = readInt(), w = readInt();
g[u].pb({v, w});
g[v].pb({u, w});
vec.pb({w, {u, v}});
}
int k = readInt();
for (int i = 1; i <= n; i++) {
d[i] = 1e9;
}
set < pair<int,int> > q;
for (int i = 1; i <= k; i++) {
int x = readInt();
d[x] = 0;
q.insert({0, x});
}
while (!q.empty()) {
int v = q.begin()->second;
q.erase (q.begin());
if (used[v]) continue;
used[v] = 1;
for (size_t j=0; j<g[v].size(); ++j) {
int to = g[v][j].first,
len = g[v][j].second;
if (d[v] + len < d[to]) {
q.erase (make_pair (d[to], to));
d[to] = d[v] + len;
q.insert (make_pair (d[to], to));
}
}
}
for (int i = 1; i <= n; i++) {
g[i].clear();
p[i] = i;
rnk[i] = 1;
}
for(int i = 0; i < m; i++) {
vec[i].first = min(d[vec[i].second.first], d[vec[i].second.second]);
}
sort(vec.begin(), vec.end());
reverse(vec.begin(), vec.end());
for (int i = 0; i < m; i++) {
if (Merge(vec[i].second.first, vec[i].second.second)) {
g[vec[i].second.first].pb({vec[i].second.second, vec[i].first});
g[vec[i].second.second].pb({vec[i].second.first, vec[i].first});
}
}
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= 17; j++) {
mn[i][j] = 1e9;
up[i][j] = -1;
}
}
dfs(1, 0);
for(int j = 1; j <= 17; j++){
for(int i = 1; i <= n; i++) if(up[i][j - 1] != -1){
up[i][j] = up[up[i][j - 1]][j - 1];
mn[i][j] = min(mn[i][j - 1], mn[up[i][j - 1]][j - 1]);
}
}
int Q = readInt();
while(Q--) {
int v = readInt(), u = readInt();
cout << get_min(u, v) << endl;
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
23 ms |
23800 KB |
Output is correct |
2 |
Correct |
24 ms |
24056 KB |
Output is correct |
3 |
Correct |
24 ms |
24060 KB |
Output is correct |
4 |
Correct |
23 ms |
23812 KB |
Output is correct |
5 |
Correct |
24 ms |
24056 KB |
Output is correct |
6 |
Correct |
24 ms |
24184 KB |
Output is correct |
7 |
Correct |
23 ms |
23928 KB |
Output is correct |
8 |
Correct |
23 ms |
23928 KB |
Output is correct |
9 |
Correct |
24 ms |
24056 KB |
Output is correct |
10 |
Correct |
24 ms |
24056 KB |
Output is correct |
11 |
Correct |
24 ms |
24056 KB |
Output is correct |
12 |
Correct |
25 ms |
24184 KB |
Output is correct |
13 |
Correct |
24 ms |
24060 KB |
Output is correct |
14 |
Correct |
25 ms |
24184 KB |
Output is correct |
15 |
Correct |
24 ms |
24184 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
23 ms |
23800 KB |
Output is correct |
2 |
Correct |
24 ms |
24056 KB |
Output is correct |
3 |
Correct |
24 ms |
24060 KB |
Output is correct |
4 |
Correct |
23 ms |
23812 KB |
Output is correct |
5 |
Correct |
24 ms |
24056 KB |
Output is correct |
6 |
Correct |
24 ms |
24184 KB |
Output is correct |
7 |
Correct |
23 ms |
23928 KB |
Output is correct |
8 |
Correct |
23 ms |
23928 KB |
Output is correct |
9 |
Correct |
24 ms |
24056 KB |
Output is correct |
10 |
Correct |
24 ms |
24056 KB |
Output is correct |
11 |
Correct |
24 ms |
24056 KB |
Output is correct |
12 |
Correct |
25 ms |
24184 KB |
Output is correct |
13 |
Correct |
24 ms |
24060 KB |
Output is correct |
14 |
Correct |
25 ms |
24184 KB |
Output is correct |
15 |
Correct |
24 ms |
24184 KB |
Output is correct |
16 |
Correct |
242 ms |
43456 KB |
Output is correct |
17 |
Correct |
727 ms |
63796 KB |
Output is correct |
18 |
Correct |
69 ms |
28468 KB |
Output is correct |
19 |
Correct |
224 ms |
51176 KB |
Output is correct |
20 |
Correct |
716 ms |
64224 KB |
Output is correct |
21 |
Correct |
406 ms |
53256 KB |
Output is correct |
22 |
Correct |
224 ms |
51244 KB |
Output is correct |
23 |
Correct |
778 ms |
63956 KB |
Output is correct |
24 |
Correct |
735 ms |
64584 KB |
Output is correct |
25 |
Correct |
734 ms |
64372 KB |
Output is correct |
26 |
Correct |
231 ms |
51252 KB |
Output is correct |
27 |
Correct |
238 ms |
51344 KB |
Output is correct |
28 |
Correct |
244 ms |
51152 KB |
Output is correct |
29 |
Correct |
237 ms |
51356 KB |
Output is correct |
30 |
Correct |
235 ms |
51592 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
27 ms |
23800 KB |
Output is correct |
2 |
Correct |
23 ms |
23800 KB |
Output is correct |
3 |
Correct |
23 ms |
23880 KB |
Output is correct |
4 |
Correct |
23 ms |
23800 KB |
Output is correct |
5 |
Correct |
23 ms |
23900 KB |
Output is correct |
6 |
Correct |
22 ms |
23928 KB |
Output is correct |
7 |
Correct |
22 ms |
23800 KB |
Output is correct |
8 |
Correct |
23 ms |
23800 KB |
Output is correct |
9 |
Correct |
23 ms |
23928 KB |
Output is correct |
10 |
Correct |
23 ms |
23924 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
325 ms |
51264 KB |
Output is correct |
2 |
Correct |
653 ms |
63464 KB |
Output is correct |
3 |
Correct |
666 ms |
63900 KB |
Output is correct |
4 |
Correct |
165 ms |
48252 KB |
Output is correct |
5 |
Correct |
659 ms |
63896 KB |
Output is correct |
6 |
Correct |
682 ms |
63912 KB |
Output is correct |
7 |
Correct |
649 ms |
63904 KB |
Output is correct |
8 |
Correct |
664 ms |
63936 KB |
Output is correct |
9 |
Correct |
653 ms |
63728 KB |
Output is correct |
10 |
Correct |
662 ms |
64024 KB |
Output is correct |
11 |
Correct |
683 ms |
64020 KB |
Output is correct |
12 |
Correct |
702 ms |
63904 KB |
Output is correct |
13 |
Correct |
668 ms |
63936 KB |
Output is correct |
14 |
Correct |
687 ms |
63484 KB |
Output is correct |
15 |
Correct |
676 ms |
63276 KB |
Output is correct |
16 |
Correct |
711 ms |
63136 KB |
Output is correct |
17 |
Correct |
686 ms |
63348 KB |
Output is correct |
18 |
Correct |
647 ms |
63400 KB |
Output is correct |
19 |
Correct |
155 ms |
49468 KB |
Output is correct |
20 |
Correct |
664 ms |
63372 KB |
Output is correct |
21 |
Correct |
617 ms |
64312 KB |
Output is correct |
22 |
Correct |
186 ms |
50344 KB |
Output is correct |
23 |
Correct |
164 ms |
45908 KB |
Output is correct |
24 |
Correct |
182 ms |
50236 KB |
Output is correct |
25 |
Correct |
179 ms |
50540 KB |
Output is correct |
26 |
Correct |
187 ms |
46860 KB |
Output is correct |
27 |
Correct |
159 ms |
50036 KB |
Output is correct |
28 |
Correct |
176 ms |
51436 KB |
Output is correct |
29 |
Correct |
163 ms |
48556 KB |
Output is correct |
30 |
Correct |
178 ms |
51100 KB |
Output is correct |
31 |
Correct |
166 ms |
49104 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
23 ms |
23800 KB |
Output is correct |
2 |
Correct |
24 ms |
24056 KB |
Output is correct |
3 |
Correct |
24 ms |
24060 KB |
Output is correct |
4 |
Correct |
23 ms |
23812 KB |
Output is correct |
5 |
Correct |
24 ms |
24056 KB |
Output is correct |
6 |
Correct |
24 ms |
24184 KB |
Output is correct |
7 |
Correct |
23 ms |
23928 KB |
Output is correct |
8 |
Correct |
23 ms |
23928 KB |
Output is correct |
9 |
Correct |
24 ms |
24056 KB |
Output is correct |
10 |
Correct |
24 ms |
24056 KB |
Output is correct |
11 |
Correct |
24 ms |
24056 KB |
Output is correct |
12 |
Correct |
25 ms |
24184 KB |
Output is correct |
13 |
Correct |
24 ms |
24060 KB |
Output is correct |
14 |
Correct |
25 ms |
24184 KB |
Output is correct |
15 |
Correct |
24 ms |
24184 KB |
Output is correct |
16 |
Correct |
242 ms |
43456 KB |
Output is correct |
17 |
Correct |
727 ms |
63796 KB |
Output is correct |
18 |
Correct |
69 ms |
28468 KB |
Output is correct |
19 |
Correct |
224 ms |
51176 KB |
Output is correct |
20 |
Correct |
716 ms |
64224 KB |
Output is correct |
21 |
Correct |
406 ms |
53256 KB |
Output is correct |
22 |
Correct |
224 ms |
51244 KB |
Output is correct |
23 |
Correct |
778 ms |
63956 KB |
Output is correct |
24 |
Correct |
735 ms |
64584 KB |
Output is correct |
25 |
Correct |
734 ms |
64372 KB |
Output is correct |
26 |
Correct |
231 ms |
51252 KB |
Output is correct |
27 |
Correct |
238 ms |
51344 KB |
Output is correct |
28 |
Correct |
244 ms |
51152 KB |
Output is correct |
29 |
Correct |
237 ms |
51356 KB |
Output is correct |
30 |
Correct |
235 ms |
51592 KB |
Output is correct |
31 |
Correct |
27 ms |
23800 KB |
Output is correct |
32 |
Correct |
23 ms |
23800 KB |
Output is correct |
33 |
Correct |
23 ms |
23880 KB |
Output is correct |
34 |
Correct |
23 ms |
23800 KB |
Output is correct |
35 |
Correct |
23 ms |
23900 KB |
Output is correct |
36 |
Correct |
22 ms |
23928 KB |
Output is correct |
37 |
Correct |
22 ms |
23800 KB |
Output is correct |
38 |
Correct |
23 ms |
23800 KB |
Output is correct |
39 |
Correct |
23 ms |
23928 KB |
Output is correct |
40 |
Correct |
23 ms |
23924 KB |
Output is correct |
41 |
Correct |
325 ms |
51264 KB |
Output is correct |
42 |
Correct |
653 ms |
63464 KB |
Output is correct |
43 |
Correct |
666 ms |
63900 KB |
Output is correct |
44 |
Correct |
165 ms |
48252 KB |
Output is correct |
45 |
Correct |
659 ms |
63896 KB |
Output is correct |
46 |
Correct |
682 ms |
63912 KB |
Output is correct |
47 |
Correct |
649 ms |
63904 KB |
Output is correct |
48 |
Correct |
664 ms |
63936 KB |
Output is correct |
49 |
Correct |
653 ms |
63728 KB |
Output is correct |
50 |
Correct |
662 ms |
64024 KB |
Output is correct |
51 |
Correct |
683 ms |
64020 KB |
Output is correct |
52 |
Correct |
702 ms |
63904 KB |
Output is correct |
53 |
Correct |
668 ms |
63936 KB |
Output is correct |
54 |
Correct |
687 ms |
63484 KB |
Output is correct |
55 |
Correct |
676 ms |
63276 KB |
Output is correct |
56 |
Correct |
711 ms |
63136 KB |
Output is correct |
57 |
Correct |
686 ms |
63348 KB |
Output is correct |
58 |
Correct |
647 ms |
63400 KB |
Output is correct |
59 |
Correct |
155 ms |
49468 KB |
Output is correct |
60 |
Correct |
664 ms |
63372 KB |
Output is correct |
61 |
Correct |
617 ms |
64312 KB |
Output is correct |
62 |
Correct |
186 ms |
50344 KB |
Output is correct |
63 |
Correct |
164 ms |
45908 KB |
Output is correct |
64 |
Correct |
182 ms |
50236 KB |
Output is correct |
65 |
Correct |
179 ms |
50540 KB |
Output is correct |
66 |
Correct |
187 ms |
46860 KB |
Output is correct |
67 |
Correct |
159 ms |
50036 KB |
Output is correct |
68 |
Correct |
176 ms |
51436 KB |
Output is correct |
69 |
Correct |
163 ms |
48556 KB |
Output is correct |
70 |
Correct |
178 ms |
51100 KB |
Output is correct |
71 |
Correct |
166 ms |
49104 KB |
Output is correct |
72 |
Correct |
413 ms |
53196 KB |
Output is correct |
73 |
Correct |
737 ms |
65072 KB |
Output is correct |
74 |
Correct |
729 ms |
64768 KB |
Output is correct |
75 |
Correct |
731 ms |
63556 KB |
Output is correct |
76 |
Correct |
720 ms |
63304 KB |
Output is correct |
77 |
Correct |
739 ms |
63960 KB |
Output is correct |
78 |
Correct |
746 ms |
64144 KB |
Output is correct |
79 |
Correct |
769 ms |
63916 KB |
Output is correct |
80 |
Correct |
771 ms |
63608 KB |
Output is correct |
81 |
Correct |
714 ms |
63996 KB |
Output is correct |
82 |
Correct |
743 ms |
63656 KB |
Output is correct |
83 |
Correct |
765 ms |
63528 KB |
Output is correct |
84 |
Correct |
755 ms |
63992 KB |
Output is correct |
85 |
Correct |
749 ms |
64116 KB |
Output is correct |
86 |
Correct |
769 ms |
63876 KB |
Output is correct |
87 |
Correct |
774 ms |
64212 KB |
Output is correct |
88 |
Correct |
753 ms |
64108 KB |
Output is correct |
89 |
Correct |
334 ms |
50396 KB |
Output is correct |
90 |
Correct |
757 ms |
64152 KB |
Output is correct |
91 |
Correct |
662 ms |
64604 KB |
Output is correct |
92 |
Correct |
235 ms |
51436 KB |
Output is correct |
93 |
Correct |
326 ms |
47352 KB |
Output is correct |
94 |
Correct |
249 ms |
51448 KB |
Output is correct |
95 |
Correct |
251 ms |
51612 KB |
Output is correct |
96 |
Correct |
306 ms |
47556 KB |
Output is correct |
97 |
Correct |
306 ms |
49248 KB |
Output is correct |
98 |
Correct |
264 ms |
51356 KB |
Output is correct |
99 |
Correct |
295 ms |
50536 KB |
Output is correct |
100 |
Correct |
261 ms |
51700 KB |
Output is correct |