168822025-05-15 12:56:20AblablablaVasútépítéscpp17Hibás válasz 40/100103ms9392 KiB
#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

vector<vector<int>> csucsok, ans, egyutt, kor;
vector<bool> bejart;

int keres(int akt, int elozo){
    bejart[akt] = 1;
    egyutt.back().push_back(akt);
    int vissza = -1;

    for(int x : csucsok[akt]){
        if(x == elozo) continue;
        if(bejart[x]){
            vissza = x;
            continue;
        }

        int a = keres(x, akt);

        if(a != -1){
            vissza = a;
        }
    }

    if(vissza != -1){
        kor.back().push_back(akt);
    }

    if(vissza == akt){
        vissza = -1;
    }

    return vissza;
}

int lent = 1, fent = 1e9;

void megold(int akt){
    bejart[akt] = 1;

    for(int x : csucsok[akt]){
        if(bejart[x]) continue;

        ans[akt][x] = lent;
        ans[x][akt] = lent;
        lent++;
        megold(x);
    }
}

int main()
{
    int n, m;
    cin >> n >> m;


    csucsok.assign(n, vector<int>());
    ans.assign(n, vector<int>(n, 0));

    for(int i = 0; i < n; i++){
        for(int j = i + 1; j < n; j++){
            ans[i][j] = ans[j][i] = fent;
            fent--;
        }
    }

    for(int i = 0; i < m; i++){
        int a, b;
        cin >> a >> b;
        a--; b--;

        csucsok[a].push_back(b);
        csucsok[b].push_back(a);
    }

    if(n < m){
        cout << "-1\n";
        return 0;
    }
    for(auto x : csucsok){
        if(x.size() == 0){
            cout << "-1\n";
            return 0;
        }
    }

    bejart.assign(n, 0);

    for(int i = 0; i < n; i++){
        if(!bejart[i]){
            egyutt.push_back(vector<int>());
            kor.push_back(vector<int>());

            keres(i, -1);
        }
    }

    int k = egyutt.size();

    bejart.assign(n, 0);

    for(int i = 0; i < k; i++){
        if(kor[i].size() == 0){
            // fa

            megold(egyutt[i][0]);
        } else{
            // fak vezetnek a korbe

            // korben eloszor

            for(int j = 0; j < kor[i].size(); j++){
                int elozo = (j - 1 + kor[i].size()) % kor[i].size();

                ans[kor[i][elozo]][kor[i][j]] = lent;
                ans[kor[i][j]][kor[i][elozo]] = lent;
                lent++;
                bejart[kor[i][j]] = 1;
            }

            // aztan fakban

            for(int x : kor[i]){
                megold(x);
            }
        }
    }

    for(int i = 0; i + 1 < n; i++){
        for(int j = i + 1; j < n; j++){
            cout << ans[i][j] << " ";
        }
        cout << "\n";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
3Elfogadva2ms316 KiB
subtask240/40
4Elfogadva74ms9324 KiB
5Elfogadva74ms9344 KiB
6Elfogadva76ms9288 KiB
7Elfogadva75ms9268 KiB
8Elfogadva76ms9392 KiB
9Elfogadva76ms9248 KiB
10Elfogadva74ms9240 KiB
11Elfogadva1ms316 KiB
subtask30/60
12Elfogadva74ms9324 KiB
13Elfogadva74ms9344 KiB
14Elfogadva76ms9288 KiB
15Elfogadva75ms9268 KiB
16Elfogadva76ms9392 KiB
17Elfogadva76ms9248 KiB
18Elfogadva74ms9240 KiB
19Elfogadva1ms316 KiB
20Hibás válasz87ms9368 KiB
21Hibás válasz75ms9248 KiB
22Hibás válasz75ms9268 KiB
23Hibás válasz76ms9252 KiB
24Hibás válasz72ms9272 KiB
25Hibás válasz75ms9252 KiB
26Hibás válasz72ms9264 KiB
27Elfogadva74ms9268 KiB
28Elfogadva103ms7988 KiB
29Elfogadva8ms4384 KiB
30Elfogadva7ms4404 KiB
31Hibás válasz75ms9204 KiB