168842025-05-15 13:18:45AblablablaVasútépítéscpp17Hibás válasz 40/100108ms9412 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 = 0, 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();

    for(auto x : egyutt){
        int akt = 0;
        for(int y : x){
            akt += csucsok[y].size();
        }

        akt /= 2;

        if(akt != x.size() - 1 && akt != x.size()){
            cout << "-1\n";
            return 0;
        }
    }

    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
4Elfogadva74ms9320 KiB
5Elfogadva75ms9412 KiB
6Elfogadva74ms9376 KiB
7Elfogadva75ms9368 KiB
8Elfogadva76ms9268 KiB
9Elfogadva75ms9380 KiB
10Elfogadva74ms9268 KiB
11Elfogadva1ms316 KiB
subtask30/60
12Elfogadva74ms9320 KiB
13Elfogadva75ms9412 KiB
14Elfogadva74ms9376 KiB
15Elfogadva75ms9368 KiB
16Elfogadva76ms9268 KiB
17Elfogadva75ms9380 KiB
18Elfogadva74ms9268 KiB
19Elfogadva1ms316 KiB
20Hibás válasz75ms9268 KiB
21Hibás válasz75ms9300 KiB
22Hibás válasz74ms9276 KiB
23Hibás válasz74ms9268 KiB
24Hibás válasz74ms9268 KiB
25Hibás válasz75ms9268 KiB
26Hibás válasz75ms9204 KiB
27Elfogadva74ms9268 KiB
28Elfogadva108ms6452 KiB
29Elfogadva8ms4408 KiB
30Elfogadva7ms4404 KiB
31Elfogadva7ms4404 KiB