#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const ll N=1e5+10;
const ll INF=1e15;
#define F first
#define S second
vector<pair<ll,ll>>g[N];
ll d[N];
ll p[N],sz[N];
ll get(ll v){
if(v==p[v])return v ;
return p[v]=get(p[v]);
}
void alpha(ll v, ll u) {
v=get(v);
u=get(u);
if (u==v) return;
if (sz[u]<sz[v])swap(u,v);
p[v]=u;
sz[u]+=sz[v];
return;
}
ll used[N];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
ll n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
d[i]=INF;
}
ll u[m+1],v[m+1],w[m+1];
for(int i=1;i<=m;i++){
cin>>u[i]>>v[i]>>w[i];
g[u[i]].push_back({v[i],w[i]});
g[v[i]].push_back({u[i],w[i]});
}
ll k;
cin>>k;
set<pair<ll,ll>>st;
for(int i=1;i<=k;i++){
ll x;
cin>>x;
d[x]=0;
st.insert({0,x});
}
while(st.size()>0){
auto CUR=st.begin();
pair<ll,ll>cur=*CUR;
st.erase(st.begin());
if(cur.F>d[cur.S])continue;
for(auto to : g[cur.S]){
if(d[to.first]>d[cur.S]+to.second){
d[to.first]=d[cur.S]+to.second;
st.insert({d[cur.S]+to.second,to.first});
}
}
}
vector<pair<ll,ll>>VEC;
for(int i=1;i<=n;i++){
VEC.push_back({d[i],i});
}
for(int i=1;i<=n;i++){
sz[i]=1;
p[i]=i;
}
sort(VEC.begin(),VEC.end());
ll q;
cin>>q;
ll s[q+1],t[q+1],l[q+1],r[q+1],mid[q+1];
for(int i=1;i<=q;i++){
cin>>s[i]>>t[i];
l[i]=1;
r[i]=n;
}
ll ans[q+1];
while(true){
for(int i=1;i<=n;i++){
p[i]=i;
used[i]=0;
sz[i]=1;
}
vector<ll>vec[n+1];
for(int i=1;i<=n;i++)vec[i].clear();
ll ok=1;
for(int i=1;i<=q;i++){
if(r[i]>=l[i])ok=0;
mid[i]=(l[i]+r[i])>>1;
vec[mid[i]].push_back(i);
}
if(ok)break;
for(int i=n;i>=1;i--){
used[VEC[i-1].second]=1;
for(auto to : g[VEC[i-1].second]){
if(used[to.first])alpha(to.first,VEC[i-1].second);
}
for(auto j : vec[i]){
if(get(s[j])==get(t[j])){
ans[j]=VEC[i-1].first;
l[j]=mid[j]+1;
}
else {
r[j]=mid[j]-1;
}
}
}
}
for(int i=1;i<=q;i++){
cout<<ans[i]<<' ';
}
}
| # | 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... |