9766 2024. 03. 06 13:56:15 FulopMate Emezen Rt. cpp17 Hibás válasz 0/100 363ms 61860 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

#define MAX(a, b) (a) = max((a), (b))
#define MIN(a, b) (a) = min((a), (b))
#define all(a) (a).begin(), (a).end()
#define sortedpair(a, b) {min((a), (b)), max((a), (b))}

const ll MOD = 1e9+7;

const int MAXN = 100'001;

struct E {
    int u, v, w;

    E(int a, int b, int c) : u(a), v(b), w(c) {}
};

int par[MAXN], ans[MAXN];
vector<int> g[MAXN], g2[MAXN];

int get(int u) {
    if (par[u] == u) return u;
    return par[u]=get(par[u]);
}

bool unio(int u, int v) {
    u = get(u); v=get(v);
    if (u == v) return false;
    par[u]=v;
    return true;
}

void dfs(int u, int p = -1, int d = 0) {
    ans[u] = d&1;
    for (int v : g[u]) {
        if (v != p) dfs(v, u, d+1);
    }
}

void solve(){
    int n, m; cin>>n>>m;
    iota(par, par+n+1, 0);
    map<pair<int, int>, int> mp;
    vector<pair<int, int>> a;
    for (int i = 0; i < m; i++) {
        int u, v; cin >> u >> v;
        g2[u].emplace_back(v);
        g2[v].emplace_back(u);
        a.emplace_back(u, v);
        if (u > v) swap(u, v);
        mp[{u, v}]++;
    }
    for (int i = 1; i <= n; i++) {
        g[i].clear();
        g2[i].clear();
    }

    vector<E> edges;
    for (auto [e, x] : mp) {
        edges.emplace_back(e.first, e.second, x);
    }
    sort(edges.begin(), edges.end(), [](auto x, auto y){
        return x.w > y.w;
    });
    for (E e : edges) {
        if (unio(e.u, e.v)) {
            g[e.u].emplace_back(e.v);
            g[e.v].emplace_back(e.u);
        }
    }
    dfs(1);
    int x = 0;
    for (int it = 0; it < 80; it++) {
        for (int i = 1; i <= n; i++) {
            int cnt = 0;
            for (int u : g2[i]) {
                cnt += (ans[u]==ans[i]);
            }
            if (cnt > g2[i].size()/2) {
                ans[i] ^= 1;
            }
        }
    }
    int cnt = count(ans+1, ans+n+1, 1);
    cout << cnt << "\n";
    for (int i = 1; i <= n; i++) {
        if (ans[i]) cout << i << " ";
    }
    cout << "\n";
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    int _t = 1;
    cin >> _t;
    while (_t--) {
        solve();
    }
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 7ms 11260 KiB
subtask2 0/16
2 Hibás válasz 6ms 11516 KiB
3 Elfogadva 7ms 11736 KiB
4 Elfogadva 7ms 11944 KiB
5 Elfogadva 6ms 12168 KiB
6 Elfogadva 6ms 12408 KiB
7 Hibás válasz 7ms 12564 KiB
8 Hibás válasz 7ms 12764 KiB
9 Elfogadva 7ms 12816 KiB
10 Hibás válasz 6ms 12936 KiB
11 Hibás válasz 6ms 12892 KiB
12 Elfogadva 6ms 13024 KiB
13 Elfogadva 7ms 13148 KiB
14 Elfogadva 7ms 13276 KiB
15 Elfogadva 6ms 13248 KiB
16 Elfogadva 7ms 13248 KiB
subtask3 0/18
17 Elfogadva 90ms 34140 KiB
18 Elfogadva 228ms 56300 KiB
19 Elfogadva 199ms 55348 KiB
20 Hibás válasz 23ms 16280 KiB
21 Elfogadva 152ms 41900 KiB
22 Elfogadva 229ms 52592 KiB
23 Elfogadva 305ms 58700 KiB
24 Elfogadva 284ms 59700 KiB
25 Elfogadva 293ms 61860 KiB
26 Elfogadva 305ms 61800 KiB
subtask4 0/66
27 Hibás válasz 23ms 16448 KiB
28 Hibás válasz 41ms 21820 KiB
29 Elfogadva 87ms 30976 KiB
30 Elfogadva 263ms 52424 KiB
31 Elfogadva 363ms 61640 KiB
32 Elfogadva 305ms 61652 KiB
33 Elfogadva 296ms 60748 KiB
34 Elfogadva 337ms 59792 KiB
35 Hibás válasz 224ms 55836 KiB
36 Hibás válasz 224ms 55868 KiB
37 Hibás válasz 8ms 14200 KiB
38 Elfogadva 13ms 16084 KiB
39 Hibás válasz 29ms 19928 KiB
40 Elfogadva 8ms 14544 KiB
41 Hibás válasz 8ms 14628 KiB
42 Elfogadva 71ms 14056 KiB
43 Hibás válasz 35ms 14148 KiB
44 Hibás válasz 16ms 14172 KiB
45 Hibás válasz 13ms 14164 KiB