제출 #832197

#제출 시각아이디문제언어결과실행 시간메모리
832197vjudge1Commuter Pass (JOI18_commuter_pass)C++14
100 / 100
277 ms36844 KiB
#include<bits/stdc++.h> #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") using namespace std; #define ll long long #define rep(i,n,N) for(int i = n; i<=N; ++i) #define rap(i,n,N) for(int i = n; i>=N; --i) #define For(i,n,N) for(int i = n; i< N; ++i) #define endl '\n' #define pb push_back #define all(x) x.begin(),x.end() #define mems(x,y) memset(x,y,sizeof x) #define ari(x) array<int,x> #define pll pair<ll,ll> #define pii pair<int,int> #define fi first #define se second const int MAX = 2e5 + 5; int n,m,a,b,c,s,t,U,V,nw; ll vis[MAX][4],cs,ncs,ans; pll dp[MAX]; vector<pii> v[MAX]; vector<int> u[MAX]; priority_queue<pll, vector<pll>, greater<pll>> pq; void gg(int st,int id){ vis[st][id] = 0; pq.push({0, st}); while(!pq.empty()){ nw = pq.top().se; cs = pq.top().fi; pq.pop(); if(vis[nw][id]!=cs)continue; for(auto &i:v[nw]){ ncs = cs+i.se; if(vis[i.fi][id]<=ncs)continue; vis[i.fi][id] = ncs; pq.push({ncs, i.fi}); } } return; } void f(int nw){ pll &ret = dp[nw]; if(ret.fi!=-1)return; ret = {vis[nw][2], vis[nw][3]}; for(auto i:u[nw]){ f(i); ret.fi = min(ret.fi, dp[i].fi); ret.se = min(ret.se, dp[i].se); } ans = min({ans, ret.fi+vis[nw][3], ret.se+vis[nw][2]}); return; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m>>s>>t>>U>>V; rep(i,1,m){ cin>>a>>b>>c; v[a].pb({b,c}); v[b].pb({a,c}); } mems(vis, 1); gg(s, 0); gg(t, 1); gg(U, 2); gg(V, 3); mems(dp, -1); rep(i,1,n){ for(auto j:v[i])if(vis[i][0]+j.se+vis[j.fi][1]==vis[t][0]){ u[i].pb(j.fi); } } ans = vis[V][2]; f(s); cout<<ans<<endl; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:14:38: warning: 'void* memset(void*, int, size_t)' writing to an object of type 'struct std::pair<long long int, long long int>' with no trivial copy-assignment [-Wclass-memaccess]
   14 | #define mems(x,y) memset(x,y,sizeof x)
      |                                      ^
commuter_pass.cpp:73:2: note: in expansion of macro 'mems'
   73 |  mems(dp, -1);
      |  ^~~~
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from commuter_pass.cpp:1:
/usr/include/c++/10/bits/stl_pair.h:211:12: note: 'struct std::pair<long long int, long long int>' declared here
  211 |     struct pair
      |            ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...