Submission #684669

#TimeUsernameProblemLanguageResultExecution timeMemory
684669LeonaRagingPlaninarenje (COCI18_planinarenje)C++14
160 / 160
6 ms596 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define db(val) "[" #val " = " << (val) << "] " const int maxn = 5e3 + 4; int n, m, t, mt[maxn], vis[maxn]; bool good[maxn], used[maxn]; vector<int> adj[maxn]; bool try_kuhn(int u) { if (vis[u] != t) vis[u] = t; else return 0; for (int v : adj[u]) if (!mt[v] || try_kuhn(mt[v])) { mt[v] = u; return 1; } return 0; } void dfs(int u) { if (vis[u]) return; vis[u] = 1; for (int v : adj[u]) if (mt[v]) { good[mt[v]] = 0; dfs(mt[v]); } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 1, u, v; i <= m; i++) { cin >> u >> v; adj[u].pb(v); } for (int u = 1; u <= n; u++) for (int v : adj[u]) if (!mt[v]) { mt[v] = u; used[u] = 1; break; } for (int u = 1; u <= n; u++) if (!used[u]) t++, try_kuhn(u); for (int u = 1; u <= n; u++) good[mt[u]] = 1; memset(vis, 0, sizeof vis); for (int u = 1; u <= n; u++) if (!good[u]) t++, dfs(u); for (int u = 1; u <= n; u++) cout << (good[u] ? "Slavko" : "Mirko") << '\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...
#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...