#include <bits/stdc++.h>
using namespace std;
const int N=500005;
const int LG=log2(N)+3;
#define fr first
#define sc second
int l;
int anc[N][LG];
int in[N],out[N],timer;
void dfs(int v,vector<int>* g,int par=0){
//cout<<v<<endl;
in[v]=timer++;
anc[v][0]=par;
for (int i=1;i<=l;i++){
anc[v][i]=anc[anc[v][i-1]][i-1];
}
for (auto to:g[v]){
if (to==par)continue;
dfs(to,g,v);
}
out[v]=timer++;
}
bool is_anc(int a,int b){
if (b==0 || a==b)return true;
if (in[a]>in[b] && in[a]<out[b])return true;
return false;
}
int lca(int a,int b){
if (is_anc(a,b)) return b;
if (is_anc(b,a)) return a;
for (int i=l;i>=0;i--)
if (!is_anc(b,anc[a][i]))
a=anc[a][i];
return anc[a][0];
}
void prec(int n,int root,vector<int>* g){
l=0;
while ((1<<l)<=n)l++;
dfs(root,g);
}
vector<pair<int,int> > g[N];
vector<int> gr[N];
int dp[N],inComp[N],node[N],val[N];
bool col[N];
vector<int> comp[N];
int main(){
ios_base::sync_with_stdio(false);
//freopen("input.txt","r",stdin);
int n,m;
cin>>n>>m;
for (int i=0;i<m;i++){
int a,b,l;
cin>>a>>b>>l;
g[a].push_back({b,l});
g[b].push_back({a,l});
}
for (int i=1;i<=n;i++){
dp[i]=INT_MAX;
}
priority_queue<pair<int,int> > pq;
int blackNum;
cin>>blackNum;
for (int i=0;i<blackNum;i++){
int k;
cin>>k;
dp[k]=0;
pq.push({0,k});
}
while (!pq.empty()){
int cur;
do{
cur=pq.top().sc;
pq.pop();
}while(col[cur] && !pq.empty());
if (col[cur])break;
col[cur]=true;
for (auto to:g[cur]){
if (dp[cur]+to.sc<dp[to.fr]){
dp[to.fr]=dp[cur]+to.sc;
pq.push({-dp[to.fr],to.fr});
}
}
}
vector<pair<int,pair<int,int> > >v;
for (int i=1;i<=n;i++){
//cout<<dp[i]<<" ";
inComp[i]=i;
node[i]=i;
comp[i].push_back(i);
for (auto to:g[i]){
v.push_back({-min(dp[to.fr],dp[i]),{i,to.fr}});
}
}
//cout<<endl;
sort(v.begin(),v.end());
int cnt=n+1;
for (int i=0;i<v.size();i++){
int a=v[i].sc.fr,b=v[i].sc.sc,len=-v[i].fr;
if (inComp[a]==inComp[b])continue;
//cout<<a<<" "<<b<<" ";
a=inComp[a];
b=inComp[b];
//cout<<a<<" "<<b<<endl;
gr[cnt].push_back(node[a]);
gr[cnt].push_back(node[b]);
//cout<<cnt<<" "<<node[a]<<" "<<node[b]<<endl;
if (comp[a].size()<comp[b].size())swap(a,b);
for (auto tv:comp[b]){
inComp[tv]=a;
comp[a].push_back(tv);
}
val[cnt]=len;
node[a]=cnt++;
}
prec(cnt-1,cnt-1,gr);
int q;
cin>>q;
for (int i=0;i<q;i++){
int a,b;
cin>>a>>b;
cout<<val[lca(a,b)]<<endl;
}
return 0;
}
Compilation message
plan.cpp: In function 'int main()':
plan.cpp:105:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0;i<v.size();i++){
~^~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
34 ms |
35576 KB |
Output is correct |
2 |
Correct |
38 ms |
35960 KB |
Output is correct |
3 |
Correct |
38 ms |
35960 KB |
Output is correct |
4 |
Correct |
34 ms |
35576 KB |
Output is correct |
5 |
Correct |
42 ms |
36064 KB |
Output is correct |
6 |
Correct |
38 ms |
35960 KB |
Output is correct |
7 |
Correct |
33 ms |
35704 KB |
Output is correct |
8 |
Correct |
34 ms |
35704 KB |
Output is correct |
9 |
Correct |
38 ms |
35960 KB |
Output is correct |
10 |
Correct |
38 ms |
35960 KB |
Output is correct |
11 |
Correct |
43 ms |
35960 KB |
Output is correct |
12 |
Correct |
38 ms |
35960 KB |
Output is correct |
13 |
Correct |
38 ms |
35992 KB |
Output is correct |
14 |
Correct |
39 ms |
35960 KB |
Output is correct |
15 |
Correct |
38 ms |
35960 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
34 ms |
35576 KB |
Output is correct |
2 |
Correct |
38 ms |
35960 KB |
Output is correct |
3 |
Correct |
38 ms |
35960 KB |
Output is correct |
4 |
Correct |
34 ms |
35576 KB |
Output is correct |
5 |
Correct |
42 ms |
36064 KB |
Output is correct |
6 |
Correct |
38 ms |
35960 KB |
Output is correct |
7 |
Correct |
33 ms |
35704 KB |
Output is correct |
8 |
Correct |
34 ms |
35704 KB |
Output is correct |
9 |
Correct |
38 ms |
35960 KB |
Output is correct |
10 |
Correct |
38 ms |
35960 KB |
Output is correct |
11 |
Correct |
43 ms |
35960 KB |
Output is correct |
12 |
Correct |
38 ms |
35960 KB |
Output is correct |
13 |
Correct |
38 ms |
35992 KB |
Output is correct |
14 |
Correct |
39 ms |
35960 KB |
Output is correct |
15 |
Correct |
38 ms |
35960 KB |
Output is correct |
16 |
Correct |
596 ms |
65236 KB |
Output is correct |
17 |
Correct |
1149 ms |
93400 KB |
Output is correct |
18 |
Correct |
112 ms |
41708 KB |
Output is correct |
19 |
Correct |
586 ms |
75752 KB |
Output is correct |
20 |
Correct |
1130 ms |
93388 KB |
Output is correct |
21 |
Correct |
787 ms |
78032 KB |
Output is correct |
22 |
Correct |
617 ms |
74648 KB |
Output is correct |
23 |
Correct |
1147 ms |
93480 KB |
Output is correct |
24 |
Correct |
1122 ms |
93364 KB |
Output is correct |
25 |
Correct |
1169 ms |
93372 KB |
Output is correct |
26 |
Correct |
599 ms |
75600 KB |
Output is correct |
27 |
Correct |
605 ms |
75756 KB |
Output is correct |
28 |
Correct |
579 ms |
75640 KB |
Output is correct |
29 |
Correct |
580 ms |
75536 KB |
Output is correct |
30 |
Correct |
586 ms |
75844 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
34 ms |
35576 KB |
Output is correct |
2 |
Correct |
34 ms |
35612 KB |
Output is correct |
3 |
Correct |
34 ms |
35704 KB |
Output is correct |
4 |
Correct |
34 ms |
35672 KB |
Output is correct |
5 |
Correct |
34 ms |
35576 KB |
Output is correct |
6 |
Correct |
33 ms |
35580 KB |
Output is correct |
7 |
Correct |
33 ms |
35576 KB |
Output is correct |
8 |
Correct |
34 ms |
35576 KB |
Output is correct |
9 |
Correct |
33 ms |
35576 KB |
Output is correct |
10 |
Correct |
35 ms |
35576 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
398 ms |
78128 KB |
Output is correct |
2 |
Correct |
738 ms |
93604 KB |
Output is correct |
3 |
Correct |
768 ms |
93776 KB |
Output is correct |
4 |
Correct |
247 ms |
71448 KB |
Output is correct |
5 |
Correct |
745 ms |
93716 KB |
Output is correct |
6 |
Correct |
736 ms |
93748 KB |
Output is correct |
7 |
Correct |
762 ms |
93576 KB |
Output is correct |
8 |
Correct |
771 ms |
93648 KB |
Output is correct |
9 |
Correct |
782 ms |
93724 KB |
Output is correct |
10 |
Correct |
774 ms |
93780 KB |
Output is correct |
11 |
Correct |
773 ms |
93620 KB |
Output is correct |
12 |
Correct |
807 ms |
93632 KB |
Output is correct |
13 |
Correct |
764 ms |
93892 KB |
Output is correct |
14 |
Correct |
765 ms |
93896 KB |
Output is correct |
15 |
Correct |
803 ms |
93784 KB |
Output is correct |
16 |
Correct |
792 ms |
93644 KB |
Output is correct |
17 |
Correct |
788 ms |
93620 KB |
Output is correct |
18 |
Correct |
778 ms |
93788 KB |
Output is correct |
19 |
Correct |
272 ms |
74148 KB |
Output is correct |
20 |
Correct |
747 ms |
93848 KB |
Output is correct |
21 |
Correct |
696 ms |
93588 KB |
Output is correct |
22 |
Correct |
220 ms |
75748 KB |
Output is correct |
23 |
Correct |
254 ms |
71068 KB |
Output is correct |
24 |
Correct |
212 ms |
75620 KB |
Output is correct |
25 |
Correct |
213 ms |
75868 KB |
Output is correct |
26 |
Correct |
263 ms |
70924 KB |
Output is correct |
27 |
Correct |
234 ms |
71560 KB |
Output is correct |
28 |
Correct |
206 ms |
76100 KB |
Output is correct |
29 |
Correct |
242 ms |
71592 KB |
Output is correct |
30 |
Correct |
216 ms |
75748 KB |
Output is correct |
31 |
Correct |
236 ms |
71496 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
34 ms |
35576 KB |
Output is correct |
2 |
Correct |
38 ms |
35960 KB |
Output is correct |
3 |
Correct |
38 ms |
35960 KB |
Output is correct |
4 |
Correct |
34 ms |
35576 KB |
Output is correct |
5 |
Correct |
42 ms |
36064 KB |
Output is correct |
6 |
Correct |
38 ms |
35960 KB |
Output is correct |
7 |
Correct |
33 ms |
35704 KB |
Output is correct |
8 |
Correct |
34 ms |
35704 KB |
Output is correct |
9 |
Correct |
38 ms |
35960 KB |
Output is correct |
10 |
Correct |
38 ms |
35960 KB |
Output is correct |
11 |
Correct |
43 ms |
35960 KB |
Output is correct |
12 |
Correct |
38 ms |
35960 KB |
Output is correct |
13 |
Correct |
38 ms |
35992 KB |
Output is correct |
14 |
Correct |
39 ms |
35960 KB |
Output is correct |
15 |
Correct |
38 ms |
35960 KB |
Output is correct |
16 |
Correct |
596 ms |
65236 KB |
Output is correct |
17 |
Correct |
1149 ms |
93400 KB |
Output is correct |
18 |
Correct |
112 ms |
41708 KB |
Output is correct |
19 |
Correct |
586 ms |
75752 KB |
Output is correct |
20 |
Correct |
1130 ms |
93388 KB |
Output is correct |
21 |
Correct |
787 ms |
78032 KB |
Output is correct |
22 |
Correct |
617 ms |
74648 KB |
Output is correct |
23 |
Correct |
1147 ms |
93480 KB |
Output is correct |
24 |
Correct |
1122 ms |
93364 KB |
Output is correct |
25 |
Correct |
1169 ms |
93372 KB |
Output is correct |
26 |
Correct |
599 ms |
75600 KB |
Output is correct |
27 |
Correct |
605 ms |
75756 KB |
Output is correct |
28 |
Correct |
579 ms |
75640 KB |
Output is correct |
29 |
Correct |
580 ms |
75536 KB |
Output is correct |
30 |
Correct |
586 ms |
75844 KB |
Output is correct |
31 |
Correct |
34 ms |
35576 KB |
Output is correct |
32 |
Correct |
34 ms |
35612 KB |
Output is correct |
33 |
Correct |
34 ms |
35704 KB |
Output is correct |
34 |
Correct |
34 ms |
35672 KB |
Output is correct |
35 |
Correct |
34 ms |
35576 KB |
Output is correct |
36 |
Correct |
33 ms |
35580 KB |
Output is correct |
37 |
Correct |
33 ms |
35576 KB |
Output is correct |
38 |
Correct |
34 ms |
35576 KB |
Output is correct |
39 |
Correct |
33 ms |
35576 KB |
Output is correct |
40 |
Correct |
35 ms |
35576 KB |
Output is correct |
41 |
Correct |
398 ms |
78128 KB |
Output is correct |
42 |
Correct |
738 ms |
93604 KB |
Output is correct |
43 |
Correct |
768 ms |
93776 KB |
Output is correct |
44 |
Correct |
247 ms |
71448 KB |
Output is correct |
45 |
Correct |
745 ms |
93716 KB |
Output is correct |
46 |
Correct |
736 ms |
93748 KB |
Output is correct |
47 |
Correct |
762 ms |
93576 KB |
Output is correct |
48 |
Correct |
771 ms |
93648 KB |
Output is correct |
49 |
Correct |
782 ms |
93724 KB |
Output is correct |
50 |
Correct |
774 ms |
93780 KB |
Output is correct |
51 |
Correct |
773 ms |
93620 KB |
Output is correct |
52 |
Correct |
807 ms |
93632 KB |
Output is correct |
53 |
Correct |
764 ms |
93892 KB |
Output is correct |
54 |
Correct |
765 ms |
93896 KB |
Output is correct |
55 |
Correct |
803 ms |
93784 KB |
Output is correct |
56 |
Correct |
792 ms |
93644 KB |
Output is correct |
57 |
Correct |
788 ms |
93620 KB |
Output is correct |
58 |
Correct |
778 ms |
93788 KB |
Output is correct |
59 |
Correct |
272 ms |
74148 KB |
Output is correct |
60 |
Correct |
747 ms |
93848 KB |
Output is correct |
61 |
Correct |
696 ms |
93588 KB |
Output is correct |
62 |
Correct |
220 ms |
75748 KB |
Output is correct |
63 |
Correct |
254 ms |
71068 KB |
Output is correct |
64 |
Correct |
212 ms |
75620 KB |
Output is correct |
65 |
Correct |
213 ms |
75868 KB |
Output is correct |
66 |
Correct |
263 ms |
70924 KB |
Output is correct |
67 |
Correct |
234 ms |
71560 KB |
Output is correct |
68 |
Correct |
206 ms |
76100 KB |
Output is correct |
69 |
Correct |
242 ms |
71592 KB |
Output is correct |
70 |
Correct |
216 ms |
75748 KB |
Output is correct |
71 |
Correct |
236 ms |
71496 KB |
Output is correct |
72 |
Correct |
822 ms |
78760 KB |
Output is correct |
73 |
Correct |
1186 ms |
94412 KB |
Output is correct |
74 |
Correct |
1190 ms |
94272 KB |
Output is correct |
75 |
Correct |
1171 ms |
95336 KB |
Output is correct |
76 |
Correct |
1167 ms |
95696 KB |
Output is correct |
77 |
Correct |
1163 ms |
95984 KB |
Output is correct |
78 |
Correct |
1171 ms |
95980 KB |
Output is correct |
79 |
Correct |
1125 ms |
95684 KB |
Output is correct |
80 |
Correct |
1159 ms |
95620 KB |
Output is correct |
81 |
Correct |
1170 ms |
95824 KB |
Output is correct |
82 |
Correct |
1176 ms |
95708 KB |
Output is correct |
83 |
Correct |
1169 ms |
95540 KB |
Output is correct |
84 |
Correct |
1144 ms |
95868 KB |
Output is correct |
85 |
Correct |
1146 ms |
96316 KB |
Output is correct |
86 |
Correct |
1149 ms |
95944 KB |
Output is correct |
87 |
Correct |
1175 ms |
96000 KB |
Output is correct |
88 |
Correct |
1217 ms |
95636 KB |
Output is correct |
89 |
Correct |
644 ms |
75936 KB |
Output is correct |
90 |
Correct |
1175 ms |
95612 KB |
Output is correct |
91 |
Correct |
1087 ms |
95560 KB |
Output is correct |
92 |
Correct |
625 ms |
76796 KB |
Output is correct |
93 |
Correct |
606 ms |
72540 KB |
Output is correct |
94 |
Correct |
613 ms |
76636 KB |
Output is correct |
95 |
Correct |
619 ms |
76940 KB |
Output is correct |
96 |
Correct |
614 ms |
71972 KB |
Output is correct |
97 |
Correct |
628 ms |
72984 KB |
Output is correct |
98 |
Correct |
619 ms |
77256 KB |
Output is correct |
99 |
Correct |
646 ms |
73272 KB |
Output is correct |
100 |
Correct |
611 ms |
76764 KB |
Output is correct |