This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
typedef pair <int, int> pii;
const int MAXN = 3e5 + 5;
int n, m, v;
int pripada[MAXN];
int vece[MAXN];
int manje[MAXN];
vector <int> jednaki[MAXN];
vector <pii> veze;
vector <int> veze_vece[MAXN];
vector <int> veze_manje[MAXN];
void vaganje() {
string s;
cin >> s;
int a, b = 0;
char znak;
unsigned t = -1;
while (++t < s.size()) {
if (s[t] == '=' || s[t] == '<') {
znak = s[t]; a = b; b = 0;
}
else {
b *= 10; b += (s[t] - '0');
}
}
if (znak == '<') {
veze.push_back({a, b});
}
else {
jednaki[a].push_back(b);
jednaki[b].push_back(a);
}
}
void dodaj (int x, int o) {
pripada[x] = o;
for (auto nx : jednaki[x]) {
if (pripada[nx]) continue;
dodaj(nx, o);
}
}
int nadi_manje (int x) {
if (manje[pripada[x]]) return manje[x] = manje[pripada[x]];
for (auto nx : veze_manje[x]) {
manje[pripada[x]] = max(manje[pripada[x]], nadi_manje(nx));
}
return ++manje[pripada[x]];
}
int nadi_vece (int x) {
if (vece[pripada[x]]) return vece[x] = vece[pripada[x]];
for (auto nx : veze_vece[x]) {
vece[pripada[x]] = max(vece[pripada[x]], nadi_vece(nx));
}
return ++vece[pripada[x]];
}
void poslozi_veze() {
for (auto x : veze) {
veze_vece[pripada[x.X]].push_back(pripada[x.Y]);
veze_manje[pripada[x.Y]].push_back(pripada[x.X]);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m >> v;
for (int i = 0; i < v; i++) vaganje();
for (int i = 1; i <= m; i++) {
if (pripada[i]) continue;
dodaj(i, i);
}
poslozi_veze();
for (int i = 1; i <= m; i++) nadi_manje(i);
for (int i = 1; i <= m; i++) nadi_vece(i);
/*
for (int i = 1; i <= m; i++) cout << pripada[i] << " "; cout << '\n';
for (int i = 1; i <= m; i++) {
cout << i << " : ";
for (auto x : veze_manje[i]) cout << x << " ";
cout << ": ";
for (auto x : veze_vece[i]) cout << x << " ";
cout << '\n';
}
for (int i = 1; i <= m; i++) cout << manje[i] << " "; cout << '\n';
for (int i = 1; i <= m; i++) cout << vece[i] << " "; cout << '\n';
*/
for (int i = 1; i <= m; i++) {
if (manje[i] + vece[i] - 1 == n) {
cout << "K" << manje[i] << "\n";
}
else cout << "?\n";
}
return 0;
}
Compilation message (stderr)
kovanice.cpp: In function 'void vaganje()':
kovanice.cpp:40:5: warning: 'znak' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (znak == '<') {
^~
# | 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... |