제출 #1121083

#제출 시각아이디문제언어결과실행 시간메모리
1121083AtabayRajabliKOVANICE (COI15_kovanice)C++17
100 / 100
198 ms36956 KiB
#include <bits/stdc++.h> #define all(v) v.begin(), v.end() #define int long long using namespace std; const int sz = 3e5 + 5; int n, m, v, p[sz], a[sz], b[sz], dp[sz], ans[sz]; char c[sz]; vector<int> g[sz]; int par(int x) { if(p[x] < 0) return x; return p[x] = par(p[x]); } bool join(int u, int v) { u = par(u), v = par(v); if(u == v) return 0; if(p[u] > p[v]) swap(u, v); p[u] += p[v]; p[v] = u; return 1; } void dfs(int v) { dp[v] = 1; for(int i : g[v]) { if(!dp[i]) dfs(i); dp[v] = max(dp[v], dp[i] + 1); } } void dfs(int v, int dist) { ans[v] = dist; for(int i : g[v]) { if(dp[i] == dp[v] - 1 && !ans[i]) { dfs(i, dist + 1); } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> v; fill(p, p + sz, -1); for(int i = 1; i <= v; i++) { cin >> a[i] >> c[i] >> b[i]; if(c[i] == '=') { join(a[i], b[i]); } } for(int i = 1; i <= v; i++) { if(c[i] == '<') { g[par(a[i])].push_back(par(b[i])); } } for(int i = 1; i <= m; i++) { if(p[par(i)] < 0 && !dp[par(i)]) { dfs(par(i)); } } for(int i = 1; i <= m; i++) { if(dp[par(i)] == n && !ans[par(i)]) { dfs(par(i), 1); } } for(int i = 1; i <= m; i++) { if(ans[par(i)]) cout << "K" << ans[par(i)]; else cout << "?"; 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...