답안 #1084592

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1084592 2024-09-06T12:53:00 Z vjudge1 KOVANICE (COI15_kovanice) C++17
0 / 100
96 ms 23756 KB
#include <bits/stdc++.h>

using namespace std;

int n, m, v;
int parent[300005], sz[300005], rez[300005];
vector<int> G[300005];

int Find(int x) {
    if (x==parent[x])
        return x;
    return parent[x]=Find(parent[x]);
}

void Union(int a, int b) {
    a=Find(a), b=Find(b);
    if (a==b) return;
    if (sz[a]<sz[b])
        swap(a, b);
    sz[a]+=sz[b];
    parent[b]=a;
}

int dfs(int teme, int klk_pred) {
    if (rez[teme]) return rez[teme];
    int k=0;
    for (auto next:G[teme]) {
        k=max(k, 1+dfs(next, klk_pred-1));
    }
    if (klk_pred==k) rez[teme]=n-klk_pred;
    else rez[teme]=-1;
    return k;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m >> v;
    int br1[v], br2[v];
    char znak[v];
    for (int i=1;i<=m;i++)
        parent[i]=i, sz[i]=1;
    for (int i=0;i<v;i++) {
        cin >> br1[i] >> znak[i] >> br2[i];
        if (znak[i]=='=')
            Union(br1[i], br2[i]);
    }
    int inDegree[m+1]={0};
    for (int i=0;i<v;i++) {
        if (znak[i]=='<') {
            G[Find(br1[i])].push_back(Find(br2[i]));
            inDegree[Find(br2[i])]++;
        }
    }
    vector<int> roots;
    for (int i=1;i<=m;i++)
        if (inDegree[i]==0&&i==Find(i))
            roots.push_back(i);
    for (auto teme:roots)
        dfs(teme, n-1);
    for (int i=1;i<=m;i++)
        rez[i]=rez[Find(i)];
    for (int i=1;i<=m;i++) {
        if (rez[i]>0) cout << 'K' << rez[i] << '\n';
        else cout << '?' << '\n';
    }

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 7512 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 43 ms 15052 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 14 ms 9560 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 96 ms 23756 KB Output isn't correct
2 Halted 0 ms 0 KB -