97702024-03-06 13:59:55FulopMateEmezen Rt.cpp17Wrong answer 0/100508ms61724 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 < 700; 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
1Accepted6ms11296 KiB
subtask20/16
2Wrong answer7ms11548 KiB
3Accepted6ms11720 KiB
4Accepted7ms11972 KiB
5Accepted6ms12040 KiB
6Accepted6ms12108 KiB
7Wrong answer7ms12208 KiB
8Wrong answer7ms12408 KiB
9Accepted6ms12500 KiB
10Wrong answer7ms12356 KiB
11Wrong answer6ms12352 KiB
12Accepted6ms12616 KiB
13Accepted6ms12564 KiB
14Accepted7ms12824 KiB
15Accepted7ms13060 KiB
16Accepted7ms13172 KiB
subtask30/18
17Accepted96ms33748 KiB
18Accepted223ms55840 KiB
19Accepted222ms54628 KiB
20Wrong answer150ms16276 KiB
21Accepted293ms41168 KiB
22Accepted342ms52120 KiB
23Accepted379ms58580 KiB
24Accepted391ms59544 KiB
25Accepted508ms61720 KiB
26Accepted449ms61580 KiB
subtask40/66
27Wrong answer165ms17064 KiB
28Wrong answer187ms22228 KiB
29Accepted232ms30652 KiB
30Accepted402ms52104 KiB
31Accepted446ms61700 KiB
32Accepted446ms61724 KiB
33Accepted476ms61056 KiB
34Accepted409ms60340 KiB
35Wrong answer229ms56308 KiB
36Wrong answer206ms56252 KiB
37Wrong answer7ms14672 KiB
38Accepted14ms16540 KiB
39Wrong answer28ms20336 KiB
40Accepted8ms14724 KiB
41Wrong answer8ms15040 KiB
42Accepted240ms14476 KiB
43Wrong answer148ms14476 KiB
44Wrong answer94ms14524 KiB
45Wrong answer86ms14636 KiB