Submission #1295175

#TimeUsernameProblemLanguageResultExecution timeMemory
1295175al95ireyizKOVANICE (COI15_kovanice)C++20
100 / 100
150 ms44188 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define vll vector<ll> #define len(x) (ll)x.size() const ll INF = 1e9, INFL = 1e18; const ll MOD = 1e9 + 7; const ll maxn = 3e5 + 5; ll n, m, k = 0; ll dsu[maxn]; ll find(ll x){ if(dsu[x] == x) return x; return dsu[x] = find(dsu[x]); } void merge(ll x, ll y){ ll p_x = find(x), p_y = find(y); if(p_x == p_y) return; dsu[p_y] = p_x; } struct D{ ll dis[maxn], vis[maxn]; vll g[maxn]; } a, b; void dfs(ll u){ if(!a.vis[u]){ a.vis[u] = 1; for(auto v : a.g[u]){ if(!a.vis[v]) dfs(v); a.dis[u] = max(a.dis[u], a.dis[v] + 1); } } } void dfs2(ll u){ if(!b.vis[u]){ b.vis[u] = 1; for(auto v : b.g[u]){ if(!b.vis[v]) dfs2(v); b.dis[u] = max(b.dis[u], b.dis[v] + 1); } } } void _() { cin >> n >> m >> k; for(ll i = 1; i <= m; i ++) dsu[i] = i; vector<pair<ll, ll>>v; char c; for(ll i = 1, x, y; i <= k; i ++){ cin >> x >> c >> y; if(c == '=') merge(x, y); else{ v.push_back({x, y}); } } for(auto [x, y] : v){ ll p_x = find(x), p_y = find(y); a.g[p_x].push_back(p_y); b.g[p_y].push_back(p_x); } for(ll i = 1; i <= m; i ++){ if(find(i) != i) continue; dfs(i); dfs2(i); } for(ll i = 1; i <= m; i ++){ ll p_i = find(i); if(a.dis[p_i] + b.dis[p_i] + 1 == n) cout << 'K' << b.dis[p_i] + 1 << '\n'; else cout << "?\n"; } } signed main() { cin.tie(0)->sync_with_stdio(0); ll t = 1; // cin >> t; while(t --) _(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...