97652024-03-06 13:55:54FulopMateEmezen Rt.cpp17Wrong answer 0/100391ms61200 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 < sqrt(n); 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;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted6ms11260 KiB
subtask20/16
2Wrong answer6ms11512 KiB
3Accepted6ms11672 KiB
4Accepted6ms11796 KiB
5Accepted6ms11888 KiB
6Accepted6ms11980 KiB
7Wrong answer6ms11976 KiB
8Wrong answer6ms12212 KiB
9Accepted6ms12184 KiB
10Wrong answer6ms12044 KiB
11Wrong answer4ms12316 KiB
12Accepted6ms12416 KiB
13Accepted6ms12424 KiB
14Accepted6ms12520 KiB
15Accepted6ms12804 KiB
16Accepted6ms12508 KiB
subtask30/18
17Accepted90ms33152 KiB
18Accepted202ms55352 KiB
19Accepted202ms54140 KiB
20Wrong answer45ms15140 KiB
21Accepted167ms40676 KiB
22Accepted236ms51372 KiB
23Accepted282ms57736 KiB
24Accepted307ms58772 KiB
25Accepted340ms60932 KiB
26Accepted338ms60940 KiB
subtask40/66
27Wrong answer50ms15592 KiB
28Wrong answer74ms21112 KiB
29Accepted112ms30052 KiB
30Accepted266ms51400 KiB
31Accepted391ms60928 KiB
32Accepted391ms61200 KiB
33Accepted375ms60428 KiB
34Accepted360ms59768 KiB
35Wrong answer233ms55732 KiB
36Wrong answer203ms55768 KiB
37Wrong answer8ms14288 KiB
38Accepted14ms16204 KiB
39Wrong answer28ms20116 KiB
40Accepted7ms14324 KiB
41Wrong answer8ms14828 KiB
42Accepted59ms14188 KiB
43Wrong answer28ms14188 KiB
44Wrong answer10ms14252 KiB
45Wrong answer8ms14416 KiB