Submission #1319178

#TimeUsernameProblemLanguageResultExecution timeMemory
1319178mehraliiKOVANICE (COI15_kovanice)C++20
50 / 100
2096 ms45052 KiB
#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, par; void dfs(int u, int d=1){ if (res[u] < 0){ a.pb(u); } if (d==n){ for (int i = 0; i < a.size(); i++){ res[a[i]]=res[par[a[i]]]+1; } a.clear(); } for (int v: g[u]){ if (v!=par[u]){ par[v]=u; dfs(v, d+1); } } if (!a.empty() && a.back()==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]&&0<compress[v]){ g[compress[u]].pb(compress[v]); in[compress[v]]++; } else 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); par.assign(m+1, 0); res[0]=0; for (int u = 1; u <= m; u++){ if (!in[u]){ dfs(u); } } 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...