77512024-01-11 07:02:40TuruTamasHálózatjavításcpp17Wrong answer 0/50400ms6736 KiB
#include <bits/stdc++.h>
using namespace std;

#ifdef DEBUG
ifstream in_file("minta/be2.txt");
#define input in_file
#define INTHENAMEOFGOD
#else
#define input cin
#define INTHENAMEOFGOD \
    ios::sync_with_stdio(0); \
    cin.tie(0); \
    cout.tie(0);
#endif
typedef long long ll;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef vector<bool> vb;
typedef pair<ll, ll> pii;

ll N, M, a, b, max_korszam;
vvi G;
vi becsat, korszam, el_fok;
vector<pii> kor;
vector<char> vis;

bool dfs1(ll x) {
    vis[x] = 1;
    for (ll next : G[x]) {
        if (!vis[next] && dfs1(next)) {
            kor[x] = {next, el_fok.size()};
            el_fok.push_back(0);
            return true;
        }
        if (vis[next] == 1) {
            kor[x] = {next, el_fok.size()};
            el_fok.push_back(0);
            return true;
        }
    }
    vis[x] = 2;
    return false;
}

void korbejar(ll tol, ll ig) {
    ll most = tol;
    while (most != ig) {
        el_fok[kor[most].second]++;
        most = kor[most].first;
    }
}

void dfs2(ll x, ll kezdx) {
    vis[x] = 1;
    for (ll next : G[x]) {
        if (kor[next].first != -1) {
            korbejar(next, kezdx);
            continue;
        }
        if (!vis[next]) {
            dfs2(next, kezdx);
        }
    }
}

int main() {
    INTHENAMEOFGOD
    input >> N >> M;
    G.resize(N);
    for (ll m = 0; m < M; m++) {
        input >> a >> b;
        a--; b--;
        G[a].push_back(b);
    }

    vis.assign(N, 0);
    becsat.assign(N, 0);
    korszam.assign(N, 0);
    kor.assign(N, {-1, 0});
    dfs1(0);
    vis.assign(N, 0);
    for (ll n = 0; n < N; n++) {
        if (kor[n].first != -1) {
            for (ll next : G[n]) {
                if (next != kor[n].first) {
                    dfs2(next, n);
                }
            }
        }
    }

    ll maxfok = *max_element(el_fok.begin(), el_fok.end());

    ll db = 0;
    string s;
    ostringstream os(s);

    for (ll n = 0; n < N; n++) {
        if (kor[n].first != -1 && el_fok[kor[n].second] == maxfok) {
            db++;
            os << kor[n].first+1 << " " << kor[kor[n].first].first+1 << "\n";
        }
    }

    cout << db << "\n" << os.str();
}
SubtaskSumTestVerdictTimeMemory
base0/50
1Wrong answer0/03ms1824 KiB
2Time limit exceeded0/0400ms3132 KiB
3Runtime error0/13ms2300 KiB
4Wrong answer0/13ms2496 KiB
5Time limit exceeded0/1400ms2596 KiB
6Wrong answer0/17ms3052 KiB
7Wrong answer0/16ms3312 KiB
8Wrong answer0/224ms3712 KiB
9Wrong answer0/224ms3940 KiB
10Wrong answer0/23ms3544 KiB
11Wrong answer0/261ms4352 KiB
12Wrong answer0/26ms3848 KiB
13Wrong answer0/2152ms5552 KiB
14Wrong answer0/2118ms5416 KiB
15Wrong answer0/2222ms6196 KiB
16Wrong answer0/2194ms5828 KiB
17Time limit exceeded0/2310ms6736 KiB
18Time limit exceeded0/2347ms5048 KiB
19Time limit exceeded0/2354ms4792 KiB
20Time limit exceeded0/2342ms4988 KiB
21Time limit exceeded0/2358ms5088 KiB
22Time limit exceeded0/2367ms5356 KiB
23Time limit exceeded0/3379ms5300 KiB
24Time limit exceeded0/4370ms5208 KiB
25Time limit exceeded0/4365ms5340 KiB
26Time limit exceeded0/4337ms5628 KiB