97682024-03-06 13:57:47FulopMateEmezen Rt.cpp17Wrong answer 0/100449ms61816 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 < 200; 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
1Accepted6ms11400 KiB
subtask20/16
2Wrong answer6ms11656 KiB
3Accepted7ms11868 KiB
4Accepted6ms12296 KiB
5Accepted6ms12220 KiB
6Accepted6ms12292 KiB
7Wrong answer6ms12212 KiB
8Wrong answer6ms12216 KiB
9Accepted6ms12308 KiB
10Wrong answer6ms12424 KiB
11Wrong answer6ms12640 KiB
12Accepted6ms12584 KiB
13Accepted6ms12708 KiB
14Accepted6ms12852 KiB
15Accepted6ms12928 KiB
16Accepted6ms12940 KiB
subtask30/18
17Accepted109ms33444 KiB
18Accepted223ms55908 KiB
19Accepted223ms54780 KiB
20Wrong answer52ms16628 KiB
21Accepted172ms41612 KiB
22Accepted234ms52276 KiB
23Accepted321ms58520 KiB
24Accepted307ms59508 KiB
25Accepted330ms61680 KiB
26Accepted335ms61620 KiB
subtask40/66
27Wrong answer56ms17036 KiB
28Wrong answer72ms22348 KiB
29Accepted115ms30848 KiB
30Accepted293ms52196 KiB
31Accepted449ms61720 KiB
32Accepted391ms61816 KiB
33Accepted328ms60892 KiB
34Accepted317ms59956 KiB
35Wrong answer204ms56056 KiB
36Wrong answer200ms55944 KiB
37Wrong answer7ms14368 KiB
38Accepted13ms16252 KiB
39Wrong answer27ms20024 KiB
40Accepted7ms14360 KiB
41Wrong answer7ms14648 KiB
42Accepted109ms14020 KiB
43Wrong answer61ms14012 KiB
44Wrong answer34ms14016 KiB
45Wrong answer28ms14040 KiB