#include <bits/stdc++.h>
#define DIM 100010
#define INF 2000000000
using namespace std;
struct muchie{
int x,y,cost;
};
vector <muchie> mch;
vector <pair<int,int> > L[DIM],edg[DIM];
priority_queue <pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > h;
int E[DIM*4],p[DIM*4],level[DIM],t[DIM],first[DIM],dist[DIM],v[DIM];
pair <int,int> rmq[21][DIM*4],dp[21][DIM];
int n,m,q,x,y,cost,i,j,k,cnt;
inline int cmp (muchie a, muchie b){
return a.cost > b.cost;
}
int get_rad (int x){
while (t[x] > 0)
x = t[x];
return x;
}
void dfs (int nod, int tata){
E[++k] = nod;
first[nod] = k;
level[nod] = 1 + level[tata];
for (auto it : edg[nod]){
int vecin = it.first, cost = it.second;
if (vecin != tata){
dp[0][vecin] = make_pair(cost,nod);
dfs (vecin,nod);
E[++k] = nod;
}}}
int get_lca (int x, int y){
int pozx = first[x], pozy = first[y];
if (pozx > pozy)
swap (pozx,pozy);
int nr = p[pozy-pozx+1];
pair <int,int> sol = min (rmq[nr][pozx],rmq[nr][pozy-(1<<nr)+1]);
return E[sol.second];
}
int get_min (int x, int lca){
int sol = INF;
for (int i=20;i>=0;i--){
int y = dp[i][x].second;
if (level[y] < level[lca])
continue;
sol = min (sol,dp[i][x].first);
x = y;
}
return sol;
}
int main (){
//ifstream cin ("date.in");
//ofstream cout ("date.out");
cin>>n>>m;
for (i=1;i<=m;i++){
cin>>x>>y>>cost;
L[x].push_back(make_pair(y,cost));
L[y].push_back(make_pair(x,cost));
}
for (i=1;i<=n;i++)
dist[i] = INF;
cin>>cnt;
for (i=1;i<=cnt;i++){
cin>>v[i];
h.push(make_pair(0,v[i]));
dist[v[i]] = 0;
}
while (!h.empty()){
int nod = h.top().second;
int cost = h.top().first;
h.pop();
if (dist[nod] != cost)
continue;
for (auto it : L[nod]){
int vecin = it.first, new_cost = it.second;
if (dist[nod] + new_cost < dist[vecin]){
dist[vecin] = dist[nod] + new_cost;
h.push(make_pair(dist[vecin],vecin));
}}}
/*cin>>q;
for (i=1;i<=q;i++)
cin>>qry[i].first>>qry[i].second;*/
for (i=1;i<=n;i++){
for (auto it : L[i]){
int vecin = it.first;
mch.push_back({i,vecin,min(dist[i],dist[vecin])});
}
}
sort (mch.begin(),mch.end(),cmp);
memset (t,-1,sizeof t);
for (auto it : mch){
int x = it.x, y = it.y;
int radx = get_rad(x), rady = get_rad(y);
if (radx != rady){
//cout<<x<<" "<<y<<" "<<it.cost<<"\n";
edg[x].push_back(make_pair(y,it.cost));
edg[y].push_back(make_pair(x,it.cost));
if (t[radx] > t[rady])
swap (radx,rady);
t[radx] += t[rady];
t[rady] = radx;
}
}
dfs (1,0);
for (i=1;i<=k;i++)
rmq[0][i] = make_pair(level[E[i]],i);
for (i=1;(1<<i)<=k;i++)
for (j=1;j<=k;j++){
rmq[i][j] = rmq[i-1][j];
if (j + (1<<(i-1)) <= k && rmq[i-1][j + (1<<(i-1))].first < rmq[i][j].first)
rmq[i][j] = rmq[i-1][j + (1<<(i-1))];
}
for (i=2;i<=k;i++)
p[i] = p[i/2] + 1;
for (i=1;(1<<i)<=n;i++)
for (j=1;j<=n;j++){
dp[i][j].second = dp[i-1][dp[i-1][j].second].second;
dp[i][j].first = min (dp[i-1][j].first,dp[i-1][dp[i-1][j].second].first);
}
cin>>q;
for (i=1;i<=q;i++){
cin>>x>>y;
int lca = get_lca (x,y);
cout<<min(get_min(x,lca),get_min(y,lca))<<"\n";
}
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
5488 KB |
Output is correct |
2 |
Correct |
8 ms |
5996 KB |
Output is correct |
3 |
Correct |
8 ms |
5996 KB |
Output is correct |
4 |
Correct |
4 ms |
5484 KB |
Output is correct |
5 |
Correct |
9 ms |
5996 KB |
Output is correct |
6 |
Correct |
9 ms |
5996 KB |
Output is correct |
7 |
Correct |
5 ms |
5632 KB |
Output is correct |
8 |
Correct |
4 ms |
5612 KB |
Output is correct |
9 |
Correct |
8 ms |
5996 KB |
Output is correct |
10 |
Correct |
9 ms |
5996 KB |
Output is correct |
11 |
Correct |
9 ms |
5996 KB |
Output is correct |
12 |
Correct |
9 ms |
5996 KB |
Output is correct |
13 |
Correct |
9 ms |
5996 KB |
Output is correct |
14 |
Correct |
9 ms |
5996 KB |
Output is correct |
15 |
Correct |
9 ms |
5996 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
5488 KB |
Output is correct |
2 |
Correct |
8 ms |
5996 KB |
Output is correct |
3 |
Correct |
8 ms |
5996 KB |
Output is correct |
4 |
Correct |
4 ms |
5484 KB |
Output is correct |
5 |
Correct |
9 ms |
5996 KB |
Output is correct |
6 |
Correct |
9 ms |
5996 KB |
Output is correct |
7 |
Correct |
5 ms |
5632 KB |
Output is correct |
8 |
Correct |
4 ms |
5612 KB |
Output is correct |
9 |
Correct |
8 ms |
5996 KB |
Output is correct |
10 |
Correct |
9 ms |
5996 KB |
Output is correct |
11 |
Correct |
9 ms |
5996 KB |
Output is correct |
12 |
Correct |
9 ms |
5996 KB |
Output is correct |
13 |
Correct |
9 ms |
5996 KB |
Output is correct |
14 |
Correct |
9 ms |
5996 KB |
Output is correct |
15 |
Correct |
9 ms |
5996 KB |
Output is correct |
16 |
Correct |
645 ms |
52144 KB |
Output is correct |
17 |
Correct |
1344 ms |
88656 KB |
Output is correct |
18 |
Correct |
98 ms |
13632 KB |
Output is correct |
19 |
Correct |
587 ms |
64220 KB |
Output is correct |
20 |
Correct |
1330 ms |
88492 KB |
Output is correct |
21 |
Correct |
842 ms |
69840 KB |
Output is correct |
22 |
Correct |
646 ms |
68480 KB |
Output is correct |
23 |
Correct |
1349 ms |
88740 KB |
Output is correct |
24 |
Correct |
1342 ms |
88768 KB |
Output is correct |
25 |
Correct |
1324 ms |
88768 KB |
Output is correct |
26 |
Correct |
576 ms |
64108 KB |
Output is correct |
27 |
Correct |
574 ms |
64092 KB |
Output is correct |
28 |
Correct |
573 ms |
63964 KB |
Output is correct |
29 |
Correct |
574 ms |
64092 KB |
Output is correct |
30 |
Correct |
577 ms |
64220 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
5484 KB |
Output is correct |
2 |
Correct |
4 ms |
5484 KB |
Output is correct |
3 |
Correct |
4 ms |
5484 KB |
Output is correct |
4 |
Correct |
4 ms |
5484 KB |
Output is correct |
5 |
Correct |
4 ms |
5484 KB |
Output is correct |
6 |
Correct |
4 ms |
5484 KB |
Output is correct |
7 |
Correct |
4 ms |
5484 KB |
Output is correct |
8 |
Correct |
4 ms |
5484 KB |
Output is correct |
9 |
Correct |
4 ms |
5484 KB |
Output is correct |
10 |
Correct |
4 ms |
5484 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
416 ms |
67720 KB |
Output is correct |
2 |
Correct |
882 ms |
86848 KB |
Output is correct |
3 |
Correct |
903 ms |
86976 KB |
Output is correct |
4 |
Correct |
202 ms |
64116 KB |
Output is correct |
5 |
Correct |
890 ms |
87232 KB |
Output is correct |
6 |
Correct |
879 ms |
87040 KB |
Output is correct |
7 |
Correct |
867 ms |
86788 KB |
Output is correct |
8 |
Correct |
894 ms |
86848 KB |
Output is correct |
9 |
Correct |
895 ms |
87160 KB |
Output is correct |
10 |
Correct |
887 ms |
86856 KB |
Output is correct |
11 |
Correct |
897 ms |
86976 KB |
Output is correct |
12 |
Correct |
894 ms |
86976 KB |
Output is correct |
13 |
Correct |
879 ms |
86908 KB |
Output is correct |
14 |
Correct |
883 ms |
86976 KB |
Output is correct |
15 |
Correct |
894 ms |
87148 KB |
Output is correct |
16 |
Correct |
891 ms |
86976 KB |
Output is correct |
17 |
Correct |
894 ms |
86848 KB |
Output is correct |
18 |
Correct |
887 ms |
86848 KB |
Output is correct |
19 |
Correct |
208 ms |
66016 KB |
Output is correct |
20 |
Correct |
873 ms |
86976 KB |
Output is correct |
21 |
Correct |
845 ms |
87488 KB |
Output is correct |
22 |
Correct |
193 ms |
62428 KB |
Output is correct |
23 |
Correct |
213 ms |
61672 KB |
Output is correct |
24 |
Correct |
201 ms |
62428 KB |
Output is correct |
25 |
Correct |
195 ms |
62428 KB |
Output is correct |
26 |
Correct |
246 ms |
61920 KB |
Output is correct |
27 |
Correct |
213 ms |
65760 KB |
Output is correct |
28 |
Correct |
197 ms |
62428 KB |
Output is correct |
29 |
Correct |
200 ms |
64864 KB |
Output is correct |
30 |
Correct |
196 ms |
62428 KB |
Output is correct |
31 |
Correct |
204 ms |
64864 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
5488 KB |
Output is correct |
2 |
Correct |
8 ms |
5996 KB |
Output is correct |
3 |
Correct |
8 ms |
5996 KB |
Output is correct |
4 |
Correct |
4 ms |
5484 KB |
Output is correct |
5 |
Correct |
9 ms |
5996 KB |
Output is correct |
6 |
Correct |
9 ms |
5996 KB |
Output is correct |
7 |
Correct |
5 ms |
5632 KB |
Output is correct |
8 |
Correct |
4 ms |
5612 KB |
Output is correct |
9 |
Correct |
8 ms |
5996 KB |
Output is correct |
10 |
Correct |
9 ms |
5996 KB |
Output is correct |
11 |
Correct |
9 ms |
5996 KB |
Output is correct |
12 |
Correct |
9 ms |
5996 KB |
Output is correct |
13 |
Correct |
9 ms |
5996 KB |
Output is correct |
14 |
Correct |
9 ms |
5996 KB |
Output is correct |
15 |
Correct |
9 ms |
5996 KB |
Output is correct |
16 |
Correct |
645 ms |
52144 KB |
Output is correct |
17 |
Correct |
1344 ms |
88656 KB |
Output is correct |
18 |
Correct |
98 ms |
13632 KB |
Output is correct |
19 |
Correct |
587 ms |
64220 KB |
Output is correct |
20 |
Correct |
1330 ms |
88492 KB |
Output is correct |
21 |
Correct |
842 ms |
69840 KB |
Output is correct |
22 |
Correct |
646 ms |
68480 KB |
Output is correct |
23 |
Correct |
1349 ms |
88740 KB |
Output is correct |
24 |
Correct |
1342 ms |
88768 KB |
Output is correct |
25 |
Correct |
1324 ms |
88768 KB |
Output is correct |
26 |
Correct |
576 ms |
64108 KB |
Output is correct |
27 |
Correct |
574 ms |
64092 KB |
Output is correct |
28 |
Correct |
573 ms |
63964 KB |
Output is correct |
29 |
Correct |
574 ms |
64092 KB |
Output is correct |
30 |
Correct |
577 ms |
64220 KB |
Output is correct |
31 |
Correct |
4 ms |
5484 KB |
Output is correct |
32 |
Correct |
4 ms |
5484 KB |
Output is correct |
33 |
Correct |
4 ms |
5484 KB |
Output is correct |
34 |
Correct |
4 ms |
5484 KB |
Output is correct |
35 |
Correct |
4 ms |
5484 KB |
Output is correct |
36 |
Correct |
4 ms |
5484 KB |
Output is correct |
37 |
Correct |
4 ms |
5484 KB |
Output is correct |
38 |
Correct |
4 ms |
5484 KB |
Output is correct |
39 |
Correct |
4 ms |
5484 KB |
Output is correct |
40 |
Correct |
4 ms |
5484 KB |
Output is correct |
41 |
Correct |
416 ms |
67720 KB |
Output is correct |
42 |
Correct |
882 ms |
86848 KB |
Output is correct |
43 |
Correct |
903 ms |
86976 KB |
Output is correct |
44 |
Correct |
202 ms |
64116 KB |
Output is correct |
45 |
Correct |
890 ms |
87232 KB |
Output is correct |
46 |
Correct |
879 ms |
87040 KB |
Output is correct |
47 |
Correct |
867 ms |
86788 KB |
Output is correct |
48 |
Correct |
894 ms |
86848 KB |
Output is correct |
49 |
Correct |
895 ms |
87160 KB |
Output is correct |
50 |
Correct |
887 ms |
86856 KB |
Output is correct |
51 |
Correct |
897 ms |
86976 KB |
Output is correct |
52 |
Correct |
894 ms |
86976 KB |
Output is correct |
53 |
Correct |
879 ms |
86908 KB |
Output is correct |
54 |
Correct |
883 ms |
86976 KB |
Output is correct |
55 |
Correct |
894 ms |
87148 KB |
Output is correct |
56 |
Correct |
891 ms |
86976 KB |
Output is correct |
57 |
Correct |
894 ms |
86848 KB |
Output is correct |
58 |
Correct |
887 ms |
86848 KB |
Output is correct |
59 |
Correct |
208 ms |
66016 KB |
Output is correct |
60 |
Correct |
873 ms |
86976 KB |
Output is correct |
61 |
Correct |
845 ms |
87488 KB |
Output is correct |
62 |
Correct |
193 ms |
62428 KB |
Output is correct |
63 |
Correct |
213 ms |
61672 KB |
Output is correct |
64 |
Correct |
201 ms |
62428 KB |
Output is correct |
65 |
Correct |
195 ms |
62428 KB |
Output is correct |
66 |
Correct |
246 ms |
61920 KB |
Output is correct |
67 |
Correct |
213 ms |
65760 KB |
Output is correct |
68 |
Correct |
197 ms |
62428 KB |
Output is correct |
69 |
Correct |
200 ms |
64864 KB |
Output is correct |
70 |
Correct |
196 ms |
62428 KB |
Output is correct |
71 |
Correct |
204 ms |
64864 KB |
Output is correct |
72 |
Correct |
854 ms |
69532 KB |
Output is correct |
73 |
Correct |
1302 ms |
88632 KB |
Output is correct |
74 |
Correct |
1319 ms |
89024 KB |
Output is correct |
75 |
Correct |
1306 ms |
88512 KB |
Output is correct |
76 |
Correct |
1291 ms |
88708 KB |
Output is correct |
77 |
Correct |
1293 ms |
88768 KB |
Output is correct |
78 |
Correct |
1286 ms |
88584 KB |
Output is correct |
79 |
Correct |
1312 ms |
88768 KB |
Output is correct |
80 |
Correct |
1294 ms |
88876 KB |
Output is correct |
81 |
Correct |
1305 ms |
88640 KB |
Output is correct |
82 |
Correct |
1319 ms |
88524 KB |
Output is correct |
83 |
Correct |
1284 ms |
88640 KB |
Output is correct |
84 |
Correct |
1292 ms |
88600 KB |
Output is correct |
85 |
Correct |
1279 ms |
88516 KB |
Output is correct |
86 |
Correct |
1357 ms |
88504 KB |
Output is correct |
87 |
Correct |
1335 ms |
88664 KB |
Output is correct |
88 |
Correct |
1322 ms |
88768 KB |
Output is correct |
89 |
Correct |
732 ms |
67296 KB |
Output is correct |
90 |
Correct |
1336 ms |
88640 KB |
Output is correct |
91 |
Correct |
1265 ms |
89280 KB |
Output is correct |
92 |
Correct |
610 ms |
64092 KB |
Output is correct |
93 |
Correct |
683 ms |
63848 KB |
Output is correct |
94 |
Correct |
616 ms |
63836 KB |
Output is correct |
95 |
Correct |
625 ms |
64092 KB |
Output is correct |
96 |
Correct |
683 ms |
63836 KB |
Output is correct |
97 |
Correct |
726 ms |
65888 KB |
Output is correct |
98 |
Correct |
624 ms |
63964 KB |
Output is correct |
99 |
Correct |
731 ms |
67424 KB |
Output is correct |
100 |
Correct |
617 ms |
63964 KB |
Output is correct |