9762 2024. 03. 06 13:52:35 FulopMate Emezen Rt. cpp17 Hibás válasz 18/100 1.062s 62300 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();
    }

    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;
    if (n <= 200) x = 20;
    else x = 100;
    for (int it = 0; it < x; 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 6ms 11536 KiB
subtask2 0/16
2 Elfogadva 7ms 11776 KiB
3 Elfogadva 6ms 11712 KiB
4 Elfogadva 6ms 11884 KiB
5 Elfogadva 7ms 12136 KiB
6 Elfogadva 6ms 12232 KiB
7 Elfogadva 6ms 12356 KiB
8 Elfogadva 6ms 12384 KiB
9 Elfogadva 6ms 12616 KiB
10 Elfogadva 6ms 12704 KiB
11 Hibás válasz 7ms 12964 KiB
12 Elfogadva 7ms 13180 KiB
13 Elfogadva 7ms 13344 KiB
14 Hibás válasz 6ms 13432 KiB
15 Elfogadva 6ms 13432 KiB
16 Hibás válasz 6ms 13304 KiB
subtask3 18/18
17 Elfogadva 119ms 33940 KiB
18 Elfogadva 254ms 56144 KiB
19 Elfogadva 287ms 55196 KiB
20 Elfogadva 39ms 16220 KiB
21 Elfogadva 321ms 42052 KiB
22 Elfogadva 432ms 52736 KiB
23 Elfogadva 493ms 58740 KiB
24 Elfogadva 521ms 59936 KiB
25 Elfogadva 663ms 62056 KiB
26 Elfogadva 563ms 62232 KiB
subtask4 0/66
27 Elfogadva 46ms 17652 KiB
28 Elfogadva 107ms 23232 KiB
29 Elfogadva 197ms 31644 KiB
30 Elfogadva 504ms 52968 KiB
31 Elfogadva 564ms 62292 KiB
32 Elfogadva 564ms 62300 KiB
33 Elfogadva 535ms 61372 KiB
34 Elfogadva 589ms 60352 KiB
35 Elfogadva 303ms 56396 KiB
36 Elfogadva 280ms 56348 KiB
37 Elfogadva 8ms 14776 KiB
38 Elfogadva 17ms 16632 KiB
39 Elfogadva 35ms 20432 KiB
40 Elfogadva 7ms 14828 KiB
41 Elfogadva 8ms 15056 KiB
42 Időlimit túllépés 1.06s 9100 KiB
43 Időlimit túllépés 1.062s 9056 KiB
44 Hibás válasz 98ms 14520 KiB
45 Hibás válasz 19ms 14460 KiB