1385 2022. 08. 30 13:33:57 mraron Dinók cpp17 Elfogadva 100/100 103ms 33448 KiB
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<cassert>
#include<cassert>
#include<unordered_map>
#include<unordered_set>
#include<functional>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<sstream>
#include<iomanip>
#include<cstdio>
#include<cstdlib>
#include<numeric>
#include<random>
#include<chrono>
#include<bitset>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

#define all(x) (x).begin(), (x).end()
#define pb push_back
#define eb emplace_back
#define xx first
#define yy second
#define sz(x) (int)(x).size()
#define gc getchar
#define IO ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define mp make_pair
#define ins insert

#ifndef ONLINE_JUDGE
#  define LOG(x) (cerr << #x << " = " << (x) << endl)
#else
#  define LOG(x) ((void)0)
#endif

using ll = long long;
using ull = unsigned long long ;
using ld = long double ;
using str = string;
using ordered_set=tree<pair<int,int>, null_type, less<pair<int,int>>, rb_tree_tag, tree_order_statistics_node_update>;

const double PI=acos(-1);
const ll INF = 1LL<<62;
const ll MINF = -(1LL<<62);

template<typename T> T getint() {
    T val=0;
    char c;
    
    bool neg=false;
    while((c=gc()) && !(c>='0' && c<='9')) {
        neg|=c=='-';
    }

    do {
        val=(val*10)+c-'0';
    } while((c=gc()) && (c>='0' && c<='9'));

    return val*(neg?-1:1);
}

//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); uniform_int_distribution<int>(0, n-1)(rng)

vector<int> adj[200001];
int indeg[200001];
void add_edge(int x, int y) {
    adj[x].push_back(y);
    indeg[y]++;
}

vector<int> ord;
int st[200001];
int pos[200001];
void dfs(int x) {
    if(indeg[x]==0) {
        st[x]=1;
        ord.pb(x);
        pos[x]=sz(ord)-1;
        for(auto i:adj[x]) {
            indeg[i]--;
            if(indeg[i]==0) {
                dfs(i);
            }
        }
    }
}

int main() {
    IO;
    int n,m;
    cin>>n>>m;
    vector<array<int,3>> t(m);
    for(int i=0;i<n;++i) {
        add_edge(2*i, 2*i+1);
    }
    for(int i=0;i<m;++i) {
        cin>>t[i][0]>>t[i][1]>>t[i][2];
        
        t[i][1]--;
        t[i][2]--;
        
        if(t[i][0]==1) {
            add_edge(t[i][1]*2, t[i][2]*2+1);
            add_edge(t[i][2]*2, t[i][1]*2+1);
        }else {
            add_edge(t[i][1]*2+1, t[i][2]*2);
        }
    }

    for(int i=0;i<2*n;++i) {
        if(!st[i]) dfs(i);
    }

    if(ord.size()==2*n) {
        cout<<"IGEN\n";
        for(int i=0;i<n;++i) {
            cout<<pos[2*i]+1<<" "<<pos[2*i+1]+1<<"\n";
        }
    }else {
        cout<<"NEM\n";
    }

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 6ms 11260 KiB
2 Elfogadva 6ms 11512 KiB
3 Elfogadva 8ms 12728 KiB
subtask2 5/5
4 Elfogadva 90ms 28384 KiB
5 Elfogadva 71ms 26376 KiB
6 Elfogadva 52ms 25792 KiB
subtask3 15/15
7 Elfogadva 4ms 12540 KiB
8 Elfogadva 6ms 12756 KiB
9 Elfogadva 6ms 12832 KiB
10 Elfogadva 6ms 13076 KiB
11 Elfogadva 6ms 13308 KiB
12 Elfogadva 6ms 13388 KiB
subtask4 10/10
13 Elfogadva 6ms 13212 KiB
14 Elfogadva 6ms 13212 KiB
15 Elfogadva 6ms 13284 KiB
16 Elfogadva 4ms 13532 KiB
17 Elfogadva 4ms 13612 KiB
subtask5 35/35
18 Elfogadva 4ms 13724 KiB
19 Elfogadva 4ms 13904 KiB
20 Elfogadva 87ms 33008 KiB
21 Elfogadva 86ms 32892 KiB
22 Elfogadva 4ms 13680 KiB
23 Elfogadva 6ms 14136 KiB
24 Elfogadva 79ms 33448 KiB
subtask6 35/35
25 Elfogadva 90ms 31352 KiB
26 Elfogadva 97ms 31468 KiB
27 Elfogadva 90ms 31420 KiB
28 Elfogadva 101ms 31468 KiB
29 Elfogadva 75ms 32396 KiB
30 Elfogadva 103ms 32048 KiB
31 Elfogadva 103ms 31640 KiB
32 Elfogadva 75ms 32388 KiB
33 Elfogadva 71ms 33236 KiB
34 Elfogadva 90ms 31648 KiB
35 Elfogadva 79ms 31216 KiB