5052 2023. 04. 11 20:32:35 Catt Elágazás nélküli úton levő települések (50 pont) cpp17 Hibás válasz 2/50 29ms 6592 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

vector<int> adj[10001];
bool vis[10001];
bool zsakfalubol[10001];

void bfs(int start) {
    queue<int> q;
    q.push(start);
    vis[start] = true;

    int szakasz = 0;

    while (!q.empty()) {
        int u = q.front();
        q.pop();
        szakasz++;

        for (int v : adj[u]) {
            if (!vis[v]) {
                vis[v] = true;
                q.push(v);
            }
        }
    }

    if (szakasz == 2) {
        zsakfalubol[start] = true;
    }
}

void dfs(int u, int &num, vector<int> &component) {
    vis[u] = true;
    num++;
    component.push_back(u);

    for (int v : adj[u]) {
        if (!vis[v]) {
            dfs(v, num, component);
        }
    }
}

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

    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    for (int i = 1; i <= n; i++) {
        if (!vis[i]) {
            bfs(i);
        }
    }

    fill(vis, vis + n + 1, false);

    vector<int> zsakfaluk;

    for (int i = 1; i <= n; i++) {
        if (zsakfalubol[i]) {
            int num = 0;
            vector<int> component;
            dfs(i, num, component);

            bool all_connected = true;

            for (int u : component) {
                for (int v : adj[u]) {
                    if (!zsakfalubol[v] && !binary_search(component.begin(), component.end(), v)) {
                        all_connected = false;
                        break;
                    }
                }
                if (!all_connected) {
                    break;
                }
            }

            if (all_connected) {
                zsakfaluk.insert(zsakfaluk.end(), component.begin(), component.end());
            }
        }
    }

    sort(zsakfaluk.begin(), zsakfaluk.end());

    cout << zsakfaluk.size() << endl;

    for (int u : zsakfaluk) {
        cout << u << " ";
    }
    cout << endl;

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 2/50
1 Hibás válasz 0/0 3ms 2440 KiB
2 Hibás válasz 0/0 29ms 4192 KiB
3 Hibás válasz 0/2 3ms 2908 KiB
4 Hibás válasz 0/2 3ms 3116 KiB
5 Elfogadva 2/2 3ms 3280 KiB
6 Hibás válasz 0/2 3ms 3252 KiB
7 Hibás válasz 0/2 3ms 3372 KiB
8 Hibás válasz 0/2 4ms 3760 KiB
9 Hibás válasz 0/2 6ms 3780 KiB
10 Hibás válasz 0/2 8ms 4116 KiB
11 Hibás válasz 0/2 14ms 4576 KiB
12 Hibás válasz 0/2 16ms 4648 KiB
13 Hibás válasz 0/3 4ms 4044 KiB
14 Hibás válasz 0/3 4ms 4168 KiB
15 Hibás válasz 0/3 6ms 4492 KiB
16 Hibás válasz 0/3 6ms 4736 KiB
17 Hibás válasz 0/3 14ms 5136 KiB
18 Hibás válasz 0/3 14ms 5156 KiB
19 Hibás válasz 0/3 17ms 5636 KiB
20 Hibás válasz 0/3 28ms 6176 KiB
21 Hibás válasz 0/3 29ms 6340 KiB
22 Hibás válasz 0/3 29ms 6592 KiB