97692024-03-06 13:58:54FulopMateEmezen Rt.cpp17Wrong answer 0/100414ms61884 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 < 350; 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 answer6ms11516 KiB
3Accepted6ms11604 KiB
4Accepted6ms11608 KiB
5Accepted7ms11676 KiB
6Accepted6ms11892 KiB
7Wrong answer6ms12132 KiB
8Wrong answer6ms12212 KiB
9Accepted6ms12280 KiB
10Wrong answer6ms12404 KiB
11Wrong answer6ms12356 KiB
12Accepted6ms12612 KiB
13Accepted6ms12568 KiB
14Accepted6ms12568 KiB
15Accepted6ms12568 KiB
16Accepted6ms12704 KiB
subtask30/18
17Accepted96ms33456 KiB
18Accepted224ms55920 KiB
19Accepted200ms54736 KiB
20Wrong answer79ms16384 KiB
21Accepted202ms41484 KiB
22Accepted263ms52068 KiB
23Accepted342ms58420 KiB
24Accepted337ms59508 KiB
25Accepted405ms61644 KiB
26Accepted414ms61812 KiB
subtask40/66
27Wrong answer90ms17572 KiB
28Wrong answer111ms22684 KiB
29Accepted148ms31124 KiB
30Accepted324ms52572 KiB
31Accepted405ms61884 KiB
32Accepted370ms61880 KiB
33Accepted405ms60856 KiB
34Accepted347ms59916 KiB
35Wrong answer204ms55960 KiB
36Wrong answer223ms55972 KiB
37Wrong answer8ms14652 KiB
38Accepted14ms16544 KiB
39Wrong answer28ms20268 KiB
40Accepted7ms14608 KiB
41Wrong answer8ms14796 KiB
42Accepted150ms14228 KiB
43Wrong answer86ms14192 KiB
44Wrong answer52ms14212 KiB
45Wrong answer46ms14308 KiB