5262 2023. 04. 24 15:39:10 anon Dinók cpp17 Hibás válasz 0/100 129ms 35336 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, wc, 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<bool> w(N + 1);

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

    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 = wc = 0;

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

        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]])
                    sames.push_back(nodes[sames[si]].sames[i]);

                w[nodes[sames[si]].sames[i]] = true;
            }

            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;
        wc += sames.size();

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

    if(wc != N)
        cout << "NEM" << endl;
    else
    {
        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 2056 KiB
3 Elfogadva 8ms 3468 KiB
subtask2 0/5
4 Hibás válasz 126ms 33276 KiB
5 Hibás válasz 64ms 24004 KiB
6 Hibás válasz 34ms 18764 KiB
subtask3 0/15
7 Hibás válasz 3ms 2752 KiB
8 Elfogadva 3ms 2952 KiB
9 Hibás válasz 2ms 3036 KiB
10 Részben helyes 2ms 3032 KiB
11 Részben helyes 3ms 3168 KiB
12 Hibás válasz 3ms 3388 KiB
subtask4 0/10
13 Hibás válasz 3ms 3624 KiB
14 Részben helyes 3ms 3832 KiB
15 Elfogadva 3ms 3920 KiB
16 Elfogadva 3ms 4120 KiB
17 Hibás válasz 2ms 4208 KiB
subtask5 0/35
18 Hibás válasz 2ms 4216 KiB
19 Hibás válasz 3ms 4276 KiB
20 Hibás válasz 97ms 25972 KiB
21 Hibás válasz 97ms 25968 KiB
22 Hibás válasz 3ms 4116 KiB
23 Elfogadva 3ms 4468 KiB
24 Elfogadva 100ms 26124 KiB
subtask6 0/35
25 Hibás válasz 115ms 32620 KiB
26 Hibás válasz 115ms 32588 KiB
27 Hibás válasz 115ms 32572 KiB
28 Hibás válasz 114ms 32568 KiB
29 Elfogadva 107ms 30576 KiB
30 Hibás válasz 112ms 32432 KiB
31 Hibás válasz 115ms 32556 KiB
32 Elfogadva 108ms 30588 KiB
33 Elfogadva 104ms 28240 KiB
34 Hibás válasz 119ms 32996 KiB
35 Elfogadva 129ms 35336 KiB