52612023-04-24 13:04:47anonDinókcpp17Részben helyes 0/100136ms35240 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 += 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Részben helyes3ms1688 KiB
2Elfogadva3ms1848 KiB
3Elfogadva8ms3412 KiB
subtask20/5
4Hibás válasz129ms33248 KiB
5Hibás válasz64ms23996 KiB
6Hibás válasz35ms18736 KiB
subtask30/15
7Hibás válasz3ms2892 KiB
8Elfogadva3ms3096 KiB
9Hibás válasz2ms3212 KiB
10Részben helyes3ms3332 KiB
11Részben helyes3ms3444 KiB
12Hibás válasz2ms3536 KiB
subtask40/10
13Hibás válasz3ms3660 KiB
14Részben helyes2ms3744 KiB
15Elfogadva3ms3988 KiB
16Elfogadva2ms4072 KiB
17Hibás válasz2ms4072 KiB
subtask50/35
18Hibás válasz2ms4076 KiB
19Hibás válasz3ms4416 KiB
20Hibás válasz101ms25892 KiB
21Hibás válasz101ms25828 KiB
22Hibás válasz3ms4196 KiB
23Elfogadva3ms4280 KiB
24Elfogadva101ms25948 KiB
subtask60/35
25Hibás válasz123ms32188 KiB
26Hibás válasz118ms32436 KiB
27Hibás válasz119ms32228 KiB
28Hibás válasz119ms32272 KiB
29Elfogadva114ms30232 KiB
30Hibás válasz119ms31968 KiB
31Hibás válasz120ms32212 KiB
32Elfogadva112ms30232 KiB
33Elfogadva103ms28016 KiB
34Hibás válasz116ms33008 KiB
35Elfogadva136ms35240 KiB