Submission #1182208

#TimeUsernameProblemLanguageResultExecution timeMemory
1182208lioowCommuter Pass (JOI18_commuter_pass)C++20
100 / 100
148 ms22372 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #define pb push_back #define int long long #define repp(i,x,n) for(int i=x;i<=n;i++) #define rep(i,x,n) for(int i=x;i>=n;i--) #define cy cout<<"YES"<<endl #define cn cout<<"NO"<<endl #define r0 return 0 #define fi first #define se second #define liow ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) #define jelek cout<<"jelek"<<endl #define pii pair<int,int> #define all(v) v.begin(),v.end() #define pi pair<pair<int,int>,pair<int,int>> #define p3 pair<int,pair<int,int>> #define p2 #define tp tuple<int,int,int> #define fl fflush(stdout) #define lb long double #define p5 pair<int,pair<pair<int,int>,pair<int,int>>> #pragma GCC optimize ("O2") #pragma GCC optimize ("unroll-loops") using namespace std; int dx[4]={-1,0,1,0}; int dy[4]={0,-1,0,1}; using namespace __gnu_pbds; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; typedef tree<pair<int,int>, null_type, less<pair<int,int>>, rb_tree_tag, tree_order_statistics_node_update> ordered_multiset; const int mod=1e9+7,maxn=1e5+5,N=5e5+5,INF=1e18; const int MOD=998244353; //const int MOD=1e6+3; mt19937_64 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count()); pii dir[8]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}}; vector<pii>adj[maxn]; int n,m,s,t,u,v; int dtos[maxn],dtou[maxn],dtov[maxn]; bool visi[maxn]; void dik(int *dist,int x){ repp(i,1,n) dist[i]=INF; dist[x]=0; priority_queue<pii,vector<pii>,greater<pii>>pq; pq.push({0,x}); while(!pq.empty()){ int dis=pq.top().fi,node=pq.top().se;pq.pop(); if(dist[node]!=dis) continue; for(auto x:adj[node]){ if(dist[x.fi]>dis+x.se){ dist[x.fi]=dis+x.se; pq.push({dis+x.se,x.fi}); } } } } int ans=INF; pii mini[maxn]; pii dfs(int x){ if(visi[x]) return mini[x]; visi[x]=1; pii lol={dtou[x],dtov[x]}; for(auto ah:adj[x]){ if(dtos[ah.fi]+ah.se==dtos[x]){ auto ahah=dfs(ah.fi); ans=min(ans,ahah.fi+dtov[x]); ans=min(ans,ahah.se+dtou[x]); lol.fi=min(lol.fi,ahah.fi); lol.se=min(lol.se,ahah.se); } } return mini[x]=lol; } void solve(){ cin>>n>>m>>s>>t>>u>>v; int c[m+2]; repp(i,1,m){ int x,y,c;cin>>x>>y>>c; adj[x].pb({y,c}); adj[y].pb({x,c}); } dik(dtos,s);dik(dtou,u);dik(dtov,v); auto ahahah=dfs(t); cout<<min(ans,dtou[v])<<endl; } signed main(){ liow; int t=1; // cin>>t; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...