제출 #1305257

#제출 시각아이디문제언어결과실행 시간메모리
1305257yhkhooKOVANICE (COI15_kovanice)C++20
100 / 100
160 ms26800 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 300000; int n, m, v; int p[MAXN], e1[MAXN], e2[MAXN], dp1[MAXN], dp2[MAXN]; basic_string<int> al1[MAXN], al2[MAXN]; int get_parent(int x){ if(p[x] == x) return x; p[x] = get_parent(p[x]); return p[x]; } bool union_set(int u, int v){ u = get_parent(u); v = get_parent(v); if(u==v) return 0; p[u] = v; return 1; } int dfs1(int x){ if(dp1[x] != -1) return dp1[x]; dp1[x] = 0; for(auto nx: al1[x]){ dp1[x] = max(dp1[x], dfs1(nx)+1); } return dp1[x]; } int dfs2(int x){ if(dp2[x] != -1) return dp2[x]; dp2[x] = 0; for(auto nx: al2[x]){ dp2[x] = max(dp2[x], dfs2(nx)+1); } return dp2[x]; } int main(){ cin.tie(0); ios_base::sync_with_stdio(0); cin >> n >> m >> v; for(int i=0; i<m; i++){ p[i] = i; } int lc=0; char c; for(int i=0,a,b; i<v; i++){ cin >> a >> c >> b; a--; b--; if(c == '='){ union_set(a, b); } else{ e1[lc] = a; e2[lc] = b; lc++; } } for(int i=0; i<lc; i++){ e1[i] = get_parent(e1[i]); e2[i] = get_parent(e2[i]); al1[e1[i]].push_back(e2[i]); al2[e2[i]].push_back(e1[i]); } memset(dp1, -1, m*sizeof(int)); memset(dp2, -1, m*sizeof(int)); for(int i=0; i<m; i++){ if(p[i] != i) continue; if(!al2[i].size()){ dfs1(i); } if(!al1[i].size()){ dfs2(i); } } for(int ii=0; ii<m; ii++){ int i = get_parent(ii); if(dp1[i] + dp2[i] == n-1){ cout << 'K' << dp2[i]+1 << '\n'; } else{ cout << '?' << '\n'; } } 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...