이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define int long long int
#define MP make_pair
#define pb push_back
#define REP(i,n) for(int (i) = 0; (i) < (n); (i)++)
using namespace std;
const double EPS = 0.00001;
const int INF = 1e9+500;
const int MOD = 1e9+7;
const int N = 55;
const int K = 1505;
const int ALPH = 26;
int n,m,q,v;
struct DSU {
vector<int> p, sz;
DSU(int num) {
p.resize(num+1);
sz.resize(num+1);
}
void make_set(int x) {
p[x] = x;
sz[x] = 1;
}
int find_set(int x) {
if(p[x] == x) return x;
return p[x] = find_set(p[x]);
}
void union_set(int x, int y) {
x = find_set(x);
y = find_set(y);
if(x == y) return;
if(sz[x] < sz[y]) swap(x,y);
p[y] = x;
sz[x] += sz[y];
}
};
vector<array<int,2> > eqs, ineqs;
vector<int> res;
void solve() {
cin>>n>>m>>v;
res.resize(m+1);
for(int i = 0; i<v; i++) {
int a,b;
char op;
cin>>a;
cin>>op;
cin>>b;
if(op == '<') {
ineqs.pb({a,b});
}
else if(op == '=') {
eqs.pb({a,b});
}
else assert(0);
}
DSU ds(m);
for(int i = 1; i<=m; i++) {
ds.make_set(i);
}
for(auto ind : eqs) {
ds.union_set(ind[0], ind[1]);
}
for(auto ind : ineqs) {
res[ ds.find_set(ind[0]) ] = 0;
res[ ds.find_set(ind[1]) ] = 1;
}
for(int i = 1; i<=m; i++) {
cout<<"K"<<res[ ds.find_set(i) ]+1<<"\n";
}
}
signed main() {
int test = 1;
//cin>>test;
while(test--) {
solve();
}
}
# | 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... |