Submission #1299432

#TimeUsernameProblemLanguageResultExecution timeMemory
1299432brover29Evacuation plan (IZhO18_plan)C++17
0 / 100
11 ms23876 KiB
#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = long long;
const ll N=5e5+29;
const string br="617283";
ll n,m,q,d[N],l[N],r[N],k,c[N],used[N],s[N],t[N],pr[N],sz[N];

vector<pair<ll,ll>>g[N];
vector<pair<ll,ll>>vc;
vector<ll>v[N];
void djikstra(){
    priority_queue<pair<ll,ll>>q;
    for(ll i=1;i<=n;i++)d[i]=1e18;
    for(ll i=1;i<=k;i++){
        d[c[i]]=0;
        q.push({0,c[i]});
    }
    while(q.size()){
        ll v=q.top().second;
        q.pop();
        if(used[v])continue;
     //   cout<<v<<' ';
        used[v]=1;
        for(auto [to,w]:g[v]){
            if(d[to]>d[v]+w){
                d[to]=d[v]+w;
                q.push({-d[to],to});
            }
        }
    }
}
ll get(ll x){
    return (x==pr[x] ? x : pr[x]=get(pr[x]));
}
void uni(ll v,ll u){
    v=get(v);
    u=get(u);
    if(v==u)return;
    if(sz[v]<sz[u])swap(v,u);
    sz[v]+=sz[u];
    pr[u]=v;
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    #ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	#endif

    cin>>n>>m;
    for(ll i=1;i<=m;i++){
        ll a,b,w;
        cin>>a>>b>>w;
        g[a].push_back({b,w});
        g[b].push_back({a,w});
    }
    cin>>k;
    for(ll i=1;i<=k;i++)cin>>c[i];
    cin>>q;
    for(ll i=1;i<=q;i++){
        cin>>s[i]>>t[i];
        l[i]=0;
        r[i]=n-1;
    }
    djikstra();
    for(ll i=1;i<=n;i++){
        vc.push_back({d[i],i});
        // cout<<i<<' '<<d[i]<<'\n';
      //  cout<<d[i]<<' ';
    }
    sort(vc.rbegin(),vc.rend());
    // for(auto [a,b]:vc){
    //     cerr<<a<<' '<<b<<'\n';
    // }
    for(ll i=1;i<20;i++){
        for(ll i=0;i<=n-1;i++)v[i].clear();
        for(ll i=1;i<=n;i++){
            used[i]=0;
            pr[i]=i;
            sz[i]=1;
        }
        for(ll i=1;i<=q;i++){
            ll md=(l[i]+r[i])>>1;
            v[md].push_back(i);
        }
        ll ii= 0;
        for(auto [x,i]:vc){
            used[i]=1;
            
            for(auto [to,w]:g[i]){
                if(used[to])uni(i,to);
            }
            for(ll j:v[ii]){
                if(get(s[j])==get(t[j])){
                 //   if(j==1)cout<<ii<<' ';
                    r[j]=ii;
                }
                else l[j]=ii+1;
            }
            ii++;
        }
    }
    for(ll i=1;i<=q;i++){
        cout<<vc[l[i]].first<<'\n';
    }
}

Compilation message (stderr)

plan.cpp: In function 'int main()':
plan.cpp:49:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |         freopen("input.txt", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...