Submission #678181

#TimeUsernameProblemLanguageResultExecution timeMemory
678181Dan4LifeSwapping Cities (APIO20_swap)C++17
0 / 100
119 ms10244 KiB
#include "swap.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second #define SZ(a) (int)a.size() using ll = long long; const int maxn = (int)1e5+10; const ll LINF = (ll)1e18; vector<pair<int,int>> adj[maxn]; ll dis[maxn], tot = 0; int par[maxn]; bool vis[maxn]; bool noCycle = false; void dfs(int s, int p, int d=0){ dis[s]=d; par[s]=p;vis[s]=1; for(auto u : adj[s]){ if(!vis[u.fi]) dfs(u.fi,s, d+u.se); } } void init(int N, int M, vector<int> u, vector<int> v, vector<int> w) { for(int i = 0; i < M; i++){ adj[u[i]].pb({v[i],w[i]}); adj[v[i]].pb({u[i],w[i]}); tot+=w[i]; } for(int i = 1; i <= N; i++){ if(SZ(adj[i])==2) continue; noCycle=true; break; } if(!noCycle) dfs(0,-1); } /* 5 4 1 2 3 2 3 4 3 4 5 4 5 6 4 1 2 1 5 2 5 2 4 */ int getMinimumFuelCapacity(int x, int y) { if(dis[x]>dis[y]) swap(x,y); if(noCycle) return -1; ll sum = dis[y]-dis[x], edgex = LINF, edgey=LINF; return tot; if(SZ(adj[y])!=1) for(auto u : adj[y]) if(dis[u.fi]>dis[y]) edgey=u.se; if(SZ(adj[x])!=1) for(auto u : adj[x]) if(dis[u.fi]<dis[x]) edgex=u.se; return sum+min(edgex,edgey); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...