7750 2024. 01. 11 06:52:25 TuruTamas Hálózatjavítás cpp17 Időlimit túllépés 3/50 400ms 8512 KiB
#include <bits/stdc++.h>
using namespace std;

#ifdef DEBUG
ifstream in_file("minta/be1.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;
vi kor;
vector<char> vis;
map<pii, ll> m;

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

void korbejar(ll tol, ll ig) {
    ll most = tol;
    while (most != ig) {
        m[{most, kor[most]}]++;
        most = kor[most];
    }
}

void dfs2(ll x, ll kezdx) {
    vis[x] = 1;
    for (ll next : G[x]) {
        if (kor[next] != -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);
    dfs1(0);
    vis.assign(N, 0);
    for (ll n = 0; n < N; n++) {
        if (kor[n] != -1) {
            for (ll next : G[n]) {
                if (next != kor[n]) {
                    dfs2(next, n);
                }
            }
        }
    }

    ll maxfok = max_element(m.begin(), m.end(), [](pair<pii, ll> a, pair<pii, ll> b) { return a.second < b.second; })->second;

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

    for (auto [el, fok] : m) {
        if (fok == maxfok) {
            db++;
            os << el.first+1 << " " << el.second+1 << "\n";
        }
    }

    cout << db << "\n" << os.str();
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 3/50
1 Elfogadva 0/0 3ms 1860 KiB
2 Időlimit túllépés 0/0 400ms 3216 KiB
3 Hibás válasz 0/1 3ms 2408 KiB
4 Elfogadva 1/1 3ms 2636 KiB
5 Időlimit túllépés 0/1 367ms 2044 KiB
6 Hibás válasz 0/1 83ms 3252 KiB
7 Hibás válasz 0/1 67ms 3540 KiB
8 Időlimit túllépés 0/2 358ms 3004 KiB
9 Időlimit túllépés 0/2 375ms 3304 KiB
10 Elfogadva 2/2 8ms 4252 KiB
11 Időlimit túllépés 0/2 400ms 3992 KiB
12 Hibás válasz 0/2 67ms 4720 KiB
13 Időlimit túllépés 0/2 372ms 4708 KiB
14 Időlimit túllépés 0/2 361ms 4492 KiB
15 Időlimit túllépés 0/2 381ms 5208 KiB
16 Időlimit túllépés 0/2 370ms 5344 KiB
17 Időlimit túllépés 0/2 351ms 5912 KiB
18 Időlimit túllépés 0/2 361ms 6820 KiB
19 Időlimit túllépés 0/2 358ms 6704 KiB
20 Időlimit túllépés 0/2 381ms 7040 KiB
21 Időlimit túllépés 0/2 363ms 7192 KiB
22 Időlimit túllépés 0/2 338ms 7436 KiB
23 Időlimit túllépés 0/3 354ms 7640 KiB
24 Időlimit túllépés 0/4 361ms 8076 KiB
25 Időlimit túllépés 0/4 365ms 8104 KiB
26 Időlimit túllépés 0/4 379ms 8512 KiB