Submission #259311

#TimeUsernameProblemLanguageResultExecution timeMemory
259311FidiskCommuter Pass (JOI18_commuter_pass)C++14
15 / 100
2086 ms32384 KiB
#include <bits/stdc++.h> using namespace std; #define oo 1e18 #define fi first #define se second #define sp(iiii) setprecision(iiii) #define IO ios_base::sync_with_stdio(false); cin.tie(0) #define ms(aaaa,xxxx) memset(aaaa,xxxx,sizeof(aaaa)) #define cntbit(xxxx) __builtin_popcount(xxxx) #define getbit(xxxx,aaaa) ((xxxx>>(aaaa-1))&1) #define _cos(xxxx) cos(xxxx*acos(-1)/180) #define _sin(xxxx) sin(xxxx*acos(-1)/180) #define _tan(xxxx) tan(xxxx*acos(-1)/180) #define PE cout<<fixed typedef long double ld; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<pair<int,int>,int> piii; typedef pair<long long,long long> pll; typedef pair<pair<long long,long long>,long long> plll; const ld pi=acos(-1); struct comp{ bool operator() (pll x,pll y) { return x.se>y.se; } }; ll n,m,s,t,u,v,a,b,c,res,f[5][500009],i; priority_queue<pll,vector<pll>,comp> heap; vector<pll> g[500009]; pll tmp; void Dijsktra(ll x,ll y){ heap.push({y,y-y}); for (int ii=1;ii<=n;ii++) { f[x][ii]=oo; } f[x][y]=0; while (!heap.empty()) { tmp=heap.top(); heap.pop(); if (f[x][tmp.fi]<tmp.se) { } else { for (int ii=0;ii<g[tmp.fi].size();ii++) { if (f[x][g[tmp.fi][ii].fi]>tmp.se+g[tmp.fi][ii].se) { f[x][g[tmp.fi][ii].fi]=tmp.se+g[tmp.fi][ii].se; heap.push({g[tmp.fi][ii].fi,tmp.se+g[tmp.fi][ii].se}); } } } } } pll calc(pll x,pll y) { return {min(x.fi,y.fi),min(x.se,y.se)}; } pll Trace(ll x) { //cout<<x<<'\n'; pll kq={f[2][x],f[3][x]}; for (int ii=0;ii<g[x].size();ii++) { if ((f[1][g[x][ii].fi]==f[1][x]-g[x][ii].se)) { pll tmp3=Trace(g[x][ii].fi); kq=calc(kq,tmp3); } } return kq; } int main(){ IO; cin>>n>>m; cin>>s>>t; cin>>u>>v; for (i=1;i<=m;i++) { cin>>a>>b>>c; g[a].push_back({b,c}); g[b].push_back({a,c}); } Dijsktra(1,s); Dijsktra(2,u); Dijsktra(3,v); res=f[2][v]; pll tmp2=Trace(t); //cout<<tmp2.fi<<' '<<tmp2.se<<'\n'; res=min(tmp2.fi+tmp2.se,res); cout<<res; }

Compilation message (stderr)

commuter_pass.cpp: In function 'void Dijsktra(ll, ll)':
commuter_pass.cpp:51:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int ii=0;ii<g[tmp.fi].size();ii++) {
                           ~~^~~~~~~~~~~~~~~~~
commuter_pass.cpp: In function 'pll Trace(ll)':
commuter_pass.cpp:68:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int ii=0;ii<g[x].size();ii++) {
                   ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...