#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ii pair<int,int>
#define fir first
#define sec second
#define pb push_back
const int maxn=1e5+2;
vector<ii>adj[maxn];
int n,m,dist[maxn],dsu[maxn],ans[maxn],cost;
map<int,int>mp[maxn];
int fin(int a){
if(dsu[a]==a)return a;
return dsu[a]=fin(dsu[a]);
}
void merg(int a,int b){
a=fin(a),b=fin(b);
if(a==b)return;
if(mp[a].size()>mp[b].size())swap(a,b);
dsu[a]=b;
for(auto [id,brp] : mp[a]){
mp[b][id]+=brp;
if(mp[b][id]==2){
ans[id]=max(ans[id],cost);
}
}
mp[a].clear();
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int q=1;q<=m;q++){
int u,v,w;
cin>>u>>v>>w;
adj[u].pb({v,w});
adj[v].pb({u,w});
}
for(int q=1;q<=n;q++){
dist[q]=1e18; dsu[q]=q;
}
int slh; cin>>slh;
priority_queue<ii,vector<ii>,greater<ii> >pq;
for(int q=1;q<=slh;q++){
int a; cin>>a;
dist[a]=0;
pq.push({0,a});
}
while(pq.size()){
auto[jrk,u]=pq.top();
pq.pop();
if(dist[u]!=jrk)continue;
for(auto [x,w] : adj[u]){
if(dist[x]>jrk+w){
dist[x]=jrk+w;
pq.push({dist[x],x});
}
}
}
vector<ii>apa;
for(int q=1;q<=n;q++)apa.pb({dist[q],q});
sort(apa.begin(),apa.end());
int qu;cin>>qu;
for(int q=1;q<=qu;q++){
int u,v; cin>>u>>v;
mp[u][q]++; mp[v][q]++;
}
while(apa.size()){
auto [jrk,_]=apa.back();
cost=jrk;
while(apa.size() && apa.back().first==cost){
auto[hmm,id]=apa.back(); apa.pop_back();
for(auto [x,w] : adj[id]){
if(dist[x]>=cost){
merg(x,id);
}
}
}
}
for(int q=1;q<=qu;q++){
cout<<ans[q]<<endl;
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |