97622024-03-06 13:52:35FulopMateEmezen Rt.cpp17Hibás válasz 18/1001.062s62300 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva6ms11536 KiB
subtask20/16
2Elfogadva7ms11776 KiB
3Elfogadva6ms11712 KiB
4Elfogadva6ms11884 KiB
5Elfogadva7ms12136 KiB
6Elfogadva6ms12232 KiB
7Elfogadva6ms12356 KiB
8Elfogadva6ms12384 KiB
9Elfogadva6ms12616 KiB
10Elfogadva6ms12704 KiB
11Hibás válasz7ms12964 KiB
12Elfogadva7ms13180 KiB
13Elfogadva7ms13344 KiB
14Hibás válasz6ms13432 KiB
15Elfogadva6ms13432 KiB
16Hibás válasz6ms13304 KiB
subtask318/18
17Elfogadva119ms33940 KiB
18Elfogadva254ms56144 KiB
19Elfogadva287ms55196 KiB
20Elfogadva39ms16220 KiB
21Elfogadva321ms42052 KiB
22Elfogadva432ms52736 KiB
23Elfogadva493ms58740 KiB
24Elfogadva521ms59936 KiB
25Elfogadva663ms62056 KiB
26Elfogadva563ms62232 KiB
subtask40/66
27Elfogadva46ms17652 KiB
28Elfogadva107ms23232 KiB
29Elfogadva197ms31644 KiB
30Elfogadva504ms52968 KiB
31Elfogadva564ms62292 KiB
32Elfogadva564ms62300 KiB
33Elfogadva535ms61372 KiB
34Elfogadva589ms60352 KiB
35Elfogadva303ms56396 KiB
36Elfogadva280ms56348 KiB
37Elfogadva8ms14776 KiB
38Elfogadva17ms16632 KiB
39Elfogadva35ms20432 KiB
40Elfogadva7ms14828 KiB
41Elfogadva8ms15056 KiB
42Időlimit túllépés1.06s9100 KiB
43Időlimit túllépés1.062s9056 KiB
44Hibás válasz98ms14520 KiB
45Hibás válasz19ms14460 KiB