#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, ufds[300005], depth[300005];
bool tried[300005], work[300005];
vector <int> adj[300005];
void init (int n) {
    for (int i=1; i<=n; i++) {ufds[i]=i; depth[i]=-1;}
}
int find (int i) {
    if (ufds[i]==i) return i;
    else return ufds[i]=find(ufds[i]);
}
void mrg (int x, int y) {
    int xrt=find(x);
    int yrt=find(y);
    if (xrt==yrt) return;
    ufds[yrt]=xrt;
}
void dfs (int x) {
    if (tried[x]) return;
    tried[x]=1;
    depth[x]=n;
    for (int i=0; i<adj[x].size(); i++) {
        int c=ufds[adj[x][i]];
        dfs(c);
        depth[x]=min(depth[x], depth[c]-1);
    }
}
void dfs2 (int x) {
    if (tried[x]) return;
    tried[x]=1;
    for (int i=0; i<adj[x].size(); i++) if (depth[adj[x][i]]==depth[x]+1) {
        work[adj[x][i]]=1;
        dfs2(adj[x][i]);
    }
}
int32_t main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int m, w;
    cin >> n >> m >> w;
    memset(tried, 0, sizeof(tried));
    string eq;
    vector <pair <int, int> > v;
    set <int> s, s2;
    init(m);
    for (int i=0; i<w; i++) {
        cin >> eq;
        int j=0, a=0, b=0, u;
        while ('9'>=eq[j]) {
            a*=10;
            a+=eq[j]-'0';
            j++;
        }
        u=j++;
        while (j<eq.size()) {
            b*=10;
            b+=eq[j]-'0';
            j++;
        }
        if (eq[u]=='=') mrg(a, b);
        else if (eq[u]=='<') v.push_back(make_pair(a, b));
        else v.push_back(make_pair(b, a));
    }
    for (int i=0; i<v.size(); i++) {
        adj[ufds[v[i].first]].push_back(v[i].second);
    }
    for (int i=1; i<=m; i++) if (!s.count(find(i))) {
        dfs(ufds[i]);
        if (depth[ufds[i]]==1) s2.insert(ufds[i]);
    }
    memset(tried, 0, sizeof(tried));
    memset(work, 0, sizeof(work));
    for (auto it:s2) {
        dfs2(it);
        work[it]=1;
    }
    for (int i=1; i<=m; i++) {
        if (work[ufds[i]]) {
            cout << "K" << depth[ufds[i]] << "\n";
        }
        else cout << "?\n";
    }
    return 0;
}
| # | 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... |