Submission #1197415

#TimeUsernameProblemLanguageResultExecution timeMemory
1197415adiyer자매 도시 (APIO20_swap)C++20
37 / 100
2097 ms17688 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 2e5 + 11; int n, m, mn, mx, ok; bool was[MAXN]; vector < int > cmp; vector < int > g[MAXN]; vector < pair < int, pair < int, int > > > reb; void init(int N, int M, vector < int > U, vector < int > V, vector < int > W){ n = N, m = M; for(int i = 0; i < m; i++) reb.push_back({W[i], {U[i], V[i]}}); sort(reb.begin(), reb.end()); } void dfs(int v){ was[v] = 1, cmp.push_back(v); for(int u : g[v]) if(!was[u]) dfs(u); } bool f(int x, int y, int till){ for(int i = 0; i <= till; i++) g[reb[i].second.first].push_back(reb[i].second.second), g[reb[i].second.second].push_back(reb[i].second.first); cmp.clear(), dfs(x), mn = n, mx = 0, ok = was[y]; for(int v : cmp) mn = min(mn, (int) g[v].size()), mx = max(mx, (int) g[v].size()), was[v] = 0; for(int i = 0; i <= till; i++) g[reb[i].second.first].clear(), g[reb[i].second.second].clear(); return ((mx > 2 || mn >= 2) && (ok)); } int getMinimumFuelCapacity(int X, int Y) { int l = 0, r = m; while(r - l > 1){ int md = (l + r) / 2; if(f(X, Y, md)) r = md; else l = md; } if(r == m) return -1; return reb[r].first; }
#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...