#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |