5263 2023. 04. 24 16:44:21 anon Dinók cpp17 Hibás válasz 0/100 136ms 36576 KiB
#include <vector>
#include <iostream>

using ll = long long;
using namespace std;

struct Node
{
    ll after;
    ll before;
    vector<ll> sames;
};

int main()
{
    ll i, a, b, c, m, pm, ni, si, N, M;

    cin >> N >> M;

    vector<vector<ll>> ss(M);

    for(i = 0; i < M; i++)
    {
        cin >> a >> b >> c;
        ss[i] = vector<ll> { a, b, c };
    }

    vector<Node> nodes(N + 1);
    vector<pair<ll, ll>> ivs(N + 1);
    vector<ll> w(N + 1);

    for(i = 1; i <= N; i++)
    {
        nodes[i].after = nodes[i].before = -1;
        w[i] = 0;
    }

    for(i = 0; i < M; i++)
    {
        switch(ss[i][0])
        {
            case 1:
            nodes[ss[i][1]].sames.push_back(ss[i][2]);
            nodes[ss[i][2]].sames.push_back(ss[i][1]);
            break;
            case 2:
            nodes[ss[i][1]].after = ss[i][2];
            nodes[ss[i][2]].before = ss[i][1];
            break;
            default:
            break;
        }
    }

    for(i = 1; i <= N; i++)
    {
        if(nodes[i].before == -1)
            break;
    }

    ni = i;
    pm = 0;

    while(true)
    {
        w[ni]++;

        vector<ll> sames { ni };
        si = 0;

        while(si < sames.size())
        {
            for(i = 0; i < nodes[sames[si]].sames.size(); i++)
            {
                if(w[nodes[sames[si]].sames[i]])
                    continue;

                sames.push_back(nodes[sames[si]].sames[i]);
                w[nodes[sames[si]].sames[i]]++;
            }

            si++;
        }

        m = pm + 2 * sames.size();

        for(i = 0; i < sames.size(); i++)
            ivs[sames[i]] = make_pair(i + pm + 1, m - i);

        pm = m;

        if(nodes[ni].after == -1)
            break;
        else
            ni = nodes[ni].after;
    }

    for(i = 1; i <= N; i++)
    {
        if(w[i] != 1)
        {
            cout << "NEM" << endl;
            return 0;
        }
    }

    cout << "IGEN" << endl;

    for(i = 1; i <= N; i++)
        cout << ivs[i].first << ' ' << ivs[i].second << endl;

    return 0;
}

Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1812 KiB
2 Elfogadva 3ms 2000 KiB
3 Elfogadva 8ms 3568 KiB
subtask2 0/5
4 Hibás válasz 136ms 34828 KiB
5 Hibás válasz 70ms 25160 KiB
6 Hibás válasz 39ms 20132 KiB
subtask3 0/15
7 Elfogadva 3ms 2676 KiB
8 Elfogadva 3ms 2916 KiB
9 Hibás válasz 3ms 2904 KiB
10 Részben helyes 3ms 3176 KiB
11 Részben helyes 3ms 3336 KiB
12 Hibás válasz 3ms 3504 KiB
subtask4 0/10
13 Hibás válasz 3ms 3712 KiB
14 Részben helyes 3ms 3832 KiB
15 Elfogadva 3ms 3772 KiB
16 Elfogadva 3ms 3888 KiB
17 Hibás válasz 3ms 3772 KiB
subtask5 0/35
18 Hibás válasz 3ms 3776 KiB
19 Hibás válasz 3ms 3844 KiB
20 Hibás válasz 101ms 27348 KiB
21 Hibás válasz 101ms 27560 KiB
22 Hibás válasz 3ms 4208 KiB
23 Elfogadva 3ms 4308 KiB
24 Elfogadva 101ms 27516 KiB
subtask6 0/35
25 Hibás válasz 119ms 33796 KiB
26 Hibás válasz 123ms 33920 KiB
27 Hibás válasz 118ms 33976 KiB
28 Hibás válasz 115ms 33848 KiB
29 Elfogadva 112ms 31868 KiB
30 Hibás válasz 116ms 33636 KiB
31 Hibás válasz 123ms 33828 KiB
32 Elfogadva 111ms 31872 KiB
33 Elfogadva 104ms 29480 KiB
34 Hibás válasz 115ms 34164 KiB
35 Elfogadva 123ms 36576 KiB