Submission #66772

#TimeUsernameProblemLanguageResultExecution timeMemory
66772MrTEKCommuter Pass (JOI18_commuter_pass)C++14
0 / 100
780 ms14492 KiB
#include <bits/stdc++.h> using namespace std; #define mp make_pair #define pb push_back #define len(a) (int)a.size() #define fi first #define sc second #define d1(w) cerr<<#w<<":"<<w<<endl; #define d2(w,c) cerr<<#w<<":"<<w<<" "<<#c<<":"<<c<<endl; #define d3(w,c,z) cerr<<#w<<":"<<w<<" "<<#c<<":"<<c<<" "<<#z<<":"<<z<<endl; #define left ind+ind #define right ind+ind+1 #define mid (l+r)/2 #define FAST_IO ios_base::sync_with_stdio(false); #define endl '\n' typedef long long int ll; const int maxn = 620; const long long LINF = 1e18; const int LOG = 31; const int INF = 1e9; const int N = 1e5 + 5; const int M = 1e4 + 5; const int SQ = 350; const int MOD = 998244353; typedef pair <int,int> pii; struct node { int cur; long long cost; }; bool operator < (node x,node y) { return x.cost > y.cost; } priority_queue <node> Q; vector <pair <int,int> > ed[N]; multiset <ll> su,sv; int n,m,s,t,u,v,vis[N]; long long sp,cu[N],cv[N],ans = LINF; void dfs(int cur,long long cost) { vis[cur] = 1; su.insert(cu[cur]); sv.insert(cv[cur]); if (cur == t) { ans = min(ans,*su.begin() + *sv.begin()); } for (auto i : ed[cur]) { if (vis[i.fi] == 0 && cost + i.sc <= sp) dfs(i.fi,cost + i.sc); } vis[cur] = 0; su.erase(su.find(cu[cur])); sv.erase(sv.find(cv[cur])); } void sp_s(){ Q.push({s,0}); while(len(Q)) { auto temp = Q.top(); Q.pop(); int cur = temp.cur, cost = temp.cost; if (vis[cur]) continue; vis[cur] = 1; if (cur == t) { sp = cost; break; } for (auto i : ed[cur]) Q.push({i.fi,cost + i.sc}); } while(len(Q)) Q.pop(); memset(vis,0,sizeof vis); } void sp_u(){ Q.push({u,0}); while(len(Q)) { auto temp = Q.top(); Q.pop(); int cur = temp.cur, cost = temp.cost; if (vis[cur]) continue; vis[cur] = 1; cu[cur] = cost; for (auto i : ed[cur]) Q.push({i.fi,cost + i.sc}); } memset(vis,0,sizeof vis); while(len(Q)) Q.pop(); } void sp_v(){ Q.push({v,0}); while(len(Q)) { auto temp = Q.top(); Q.pop(); int cur = temp.cur, cost = temp.cost; if (vis[cur]) continue; vis[cur] = 1; cv[cur] = cost; for (auto i : ed[cur]) Q.push({i.fi,cost + i.sc}); } memset(vis,0,sizeof vis); while(len(Q)) Q.pop(); } int main() { scanf("%d %d %d %d %d %d",&n,&m,&s,&t,&u,&v); for (int i = 1 ; i <= m ; i++) { int u,v,c; scanf("%d %d %d",&u,&v,&c); ed[u].pb(mp(v,c)); ed[v].pb(mp(u,c)); } sp_s(); sp_u(); sp_v(); //dfs(s,0); printf("%lld\n",ans); }

Compilation message (stderr)

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:115:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d %d %d %d",&n,&m,&s,&t,&u,&v);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:118:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d",&u,&v,&c);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...