Submission #532843

#TimeUsernameProblemLanguageResultExecution timeMemory
532843ohohorzSwapping Cities (APIO20_swap)C++14
37 / 100
2050 ms25964 KiB
#include "swap.h" #include <vector> #include<set> #include<algorithm> #include<climits> using namespace std; // #define int long long #define pb push_back #define mp make_pair #define pii pair<int,int> #define sz(x) (int)x.size() const int MAXN = 1e5 + 5; const int INF = INT_MAX; int n, m; // vector< pair <int,int> > g[MAXN]; vector< pair<pii,int> > ed; vector<int> wts; int deg[MAXN]; int tot, onedeg, twodeg; bool vis[MAXN]; vector<pii> g[MAXN]; void dfs(int u){ vis[u] = 1; tot ++; onedeg += (deg[u] == 1); twodeg += (deg[u] == 2); for(auto p:g[u]){ if(!vis[p.first]) dfs(p.first); } } bool cmp(pair<pii,int> a, pair<pii,int> b){ if(a.second < b.second) return 1; if(a.second > b.second) return 0; return 1; } void init(int N, int M, std::vector<int> U, std::vector<int> V, std::vector<int> W) { n = N,m = M; set<int> wt; for(int i = 0;i < m;i++){ int u = U[i] + 1; int v = V[i] + 1; ed.pb(mp(mp(u, v), W[i])); wt.insert(W[i]); } sort(ed.begin(), ed.end(), cmp); for(int gg:wt) wts.pb(gg); } int getMinimumFuelCapacity(int X, int Y) { X++, Y++; int l = 0, r = sz(wts) - 1; int ans = INF; while(l <= r){ int md = (l + r) >> 1LL; int W = wts[md]; for(int i =1;i<=n;i++) g[i].clear(), vis[i] = 0; for(int i =1;i<=n;i++) deg[i] = 0; for(int i = 0;i<m;i++){ if(ed[i].second > W) break; int u = ed[i].first.first; int v = ed[i].first.second; int w = ed[i].second; g[u].pb(mp(v, w)); g[v].pb(mp(u, w)); deg[u] ++; deg[v] ++; } tot = 0, onedeg = 0, twodeg=0; bool ok = 1; dfs(X); ok &= vis[Y]; if(!ok){ l = md + 1; continue; } // connected hai x and y if(tot == (onedeg + twodeg) and onedeg == 2 and twodeg == (tot - 2)) ok = 0; if(ok==1){ ans = min(ans, W); r = md - 1; }else l = md + 1; } if(ans == INF) return -1; return ans; }
#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...