#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
using namespace std;
// using namespace __gnu_pbds;
// template <typename T>
// using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define int long long
#define pb push_back
#define eb emplace_back
#define pf push_front
#define ppb pop_back
#define ppf pop_front
#define ins insert
#define ff first
#define ss second
// mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
constexpr int inf = 1e15, mod = 998244353, maxn = 1000005;
int n, m, V;
vector<vector<int>> g1, g;
vector<int> compress, res;
vector<bool> vis;
vector<vector<int>> rr;
void dfs1(int u, int id){
vis[u]=true;
compress[u]=id;
rr[id].pb(u);
for (int v: g1[u]){
if (!vis[v]){
dfs1(v, id);
}
}
}
vector<int> a;
void dfs(int u, int par){
a.pb(u);
if (a.size()==n){
for (int i = 0; i < a.size(); i++){
res[a[i]]=i+1;
}
}
for (int v: g[u]){
if (v!=par){
dfs(v, u);
}
}
a.ppb();
}
void solve(){
cin >> n >> m >> V;
vector<pair<int,int>> edges;
g1.assign(m+1, vector<int>());
compress.assign(m+1, -1);
rr.assign(m+1, vector<int>());
vis.assign(m+1, true);
for (int i = 0; i < V; i++){
int u=0, v=0;
char cc='*';
string l;
cin >> l;
for (char c: l){
if ('0'<=c&&c<='9'){
if (cc=='*'){
u*=10;
u+=(c-'0');
} else{
v*=10;
v+=(c-'0');
}
} else{
cc=c;
}
}
if (cc=='='){
g1[u].pb(v);
g1[v].pb(u);
vis[u]=vis[v]=false;
} else{
edges.eb(u, v);
}
}
for (int u = 1; u <= m; u++){
if (!vis[u]){
dfs1(u, u);
}
}
g.assign(m+1, vector<int>());
vector<int> in(m+1, 0);
for (auto [u, v]: edges){
if (0<compress[u]){
g[compress[u]].pb(v);
in[v]++;
} else if (0<compress[v]){
g[u].pb(compress[v]);
in[compress[v]]++;
} else{
g[u].pb(v);
in[v]++;
}
}
res.assign(m+1, -1);
for (int u = 1; u <= m; u++){
if (!in[u]){
dfs(u, -1);
}
}
for (int i = 1; i <= m; i++){
for (int v: rr[i]){
res[v] = res[i];
}
}
for (int i = 1; i <= m; i++){
if (res[i]<0){
cout << "?\n";
} else{
cout << "K" << res[i] << '\n';
}
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
// cin >> t;
for (int i = 0; i < t; i++) {
solve();
}
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... |