Submission #1300063

#TimeUsernameProblemLanguageResultExecution timeMemory
1300063azamuraiOlympic Bus (JOI20_ho_t4)C++20
0 / 100
13 ms3572 KiB
#include <bits/stdc++.h> #define int long long #define fi first #define se second #define mp make_pair #define Sz(x) (int)x.size() using namespace std; const int N = 205; const int inf = 1e18; int n, m, used[N], comp[N]; vector <int> g[N], order; void dfs(int v) { used[v] = 1; for (auto to : g[v]) { if (!used[to]) dfs(to); } order.push_back(v); } void dfs2(int v, int ind) { comp[v] = ind; used[v] = 1; for (auto to : g[v]) { if (!used[to]) dfs2(to, ind); } } void solve() { cin >> n >> m; vector <pair<pair<int,int>,int>> edges; vector <pair<int,int>> save; for (int i = 1; i <= m; i++) { int u, v, c, d; cin >> u >> v >> c >> d; g[u].push_back(v); edges.push_back(mp(mp(u, v), d)); save.push_back(mp(u, v)); } for (int i = 1; i <= n; i++) { if (!used[i]) { dfs(i); } } reverse(order.begin(), order.end()); for (int i = 1; i <= n; i++) { g[i].clear(); used[i] = 0; } for (auto [u, v] : save) { g[v].push_back(u); } int sz = 0; for (auto to : order) { if (!used[to]) { dfs2(to, ++sz); } } if (comp[1] == comp[n]) { cout << 0; return; } for (int i = 1; i <= n; i++) { g[i].clear(); used[i] = 0; } for (auto [u, v] : save) { if (comp[u] != comp[v]) { g[comp[u]].push_back(comp[v]); } } int s = 1, f = n; if (comp[s] > comp[f]) swap(s, f); dfs(comp[s]); if (!used[f]) { cout << -1; return; } for (int i = 1; i <= n; i++) { used[i] = 0; } dfs(comp[f]); int ans = inf; vector <int> have; for (auto to : edges) { int v = to.fi.fi, u = to.fi.se, d = to.se; if (comp[v] == comp[s] && used[comp[u]] && comp[u] != comp[f]) { ans = min(ans, d); } if (comp[v] == comp[s] && comp[u] == comp[f]) { have.push_back(d); } } sort(have.begin(), have.end()); if (Sz(have) >= 2) ans = min(ans, have[0]); if (ans == inf) cout << -1; else cout << ans; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int tt = 1; // cin >> tt; while (tt--) { solve(); // cout << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...