이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
struct disjoint_sets {
int N;
vector<int> leader, rank;
disjoint_sets(int n) : N(n) {
leader.resize(N);
rank.resize(N, 1);
iota(leader.begin(), leader.end(), 0);
}
int get(int x) {
return leader[x] = (x == leader[x] ? x : get(leader[x]));
}
bool unite(int x, int y) {
x = get(x);
y = get(y);
if (x == y) {
return false;
}
if (rank[x] < rank[y]) {
swap(x, y);
}
leader[y] = x;
rank[x] += rank[y];
rank[y] = 0;
return true;
}
bool same(int x, int y) {
return get(x) == get(y);
}
};
int main() {
int N, M, V;
cin >> N >> M >> V;
disjoint_sets dsu(M);
vector<array<int, 2>> E;
for (int i = 0;i < V; ++i) {
int u, v;
char c;
cin >> u >> c >> v;
--u, --v;
if (c == '=') {
dsu.unite(u, v);
} else {
E.push_back({u, v});
}
}
vector<vector<int>> in(M), out(M);
for (int i = 0;i < E.size(); ++i) {
int u = dsu.get(E[i][0]);
int v = dsu.get(E[i][1]);
E[i] = {u, v};
in[v].push_back(u);
out[u].push_back(v);
}
vector<vector<int>> dp(2, vector<int>(M, -1));
function<int(int, int)> dfs = [&](int u, int t) {
if (dp[t][u] != -1) {
return dp[t][u];
}
int go = 0;
for (int v : (t ? out[u] : in[u])) {
go = max(go, dfs(v, t) + 1);
}
return dp[t][u] = go;
};
vector<int> ans(M);
for (int i = 0;i < M; ++i) {
int u = dsu.get(i);
if (in[u].size() == 0) {
dfs(u, 1);
}
if (out[u].size() == 0) {
dfs(u, 0);
}
}
for (int i = 0;i < M; ++i) {
int u = dsu.get(i);
if (dp[0][u] + dp[1][u] + 1 == N) {
ans[u] = dp[0][u] + 1;
}
if (ans[u] == 0) {
cout << "?\n";
continue;
}
cout << "K" << ans[u] << '\n';
}
}
컴파일 시 표준 에러 (stderr) 메시지
kovanice.cpp: In function 'int main()':
kovanice.cpp:49:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
49 | for (int i = 0;i < E.size(); ++i) {
| ~~^~~~~~~~~~
# | 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... |