97652024-03-06 13:55:54FulopMateEmezen Rt.cpp17Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva6ms11260 KiB
subtask20/16
2Hibás válasz6ms11512 KiB
3Elfogadva6ms11672 KiB
4Elfogadva6ms11796 KiB
5Elfogadva6ms11888 KiB
6Elfogadva6ms11980 KiB
7Hibás válasz6ms11976 KiB
8Hibás válasz6ms12212 KiB
9Elfogadva6ms12184 KiB
10Hibás válasz6ms12044 KiB
11Hibás válasz4ms12316 KiB
12Elfogadva6ms12416 KiB
13Elfogadva6ms12424 KiB
14Elfogadva6ms12520 KiB
15Elfogadva6ms12804 KiB
16Elfogadva6ms12508 KiB
subtask30/18
17Elfogadva90ms33152 KiB
18Elfogadva202ms55352 KiB
19Elfogadva202ms54140 KiB
20Hibás válasz45ms15140 KiB
21Elfogadva167ms40676 KiB
22Elfogadva236ms51372 KiB
23Elfogadva282ms57736 KiB
24Elfogadva307ms58772 KiB
25Elfogadva340ms60932 KiB
26Elfogadva338ms60940 KiB
subtask40/66
27Hibás válasz50ms15592 KiB
28Hibás válasz74ms21112 KiB
29Elfogadva112ms30052 KiB
30Elfogadva266ms51400 KiB
31Elfogadva391ms60928 KiB
32Elfogadva391ms61200 KiB
33Elfogadva375ms60428 KiB
34Elfogadva360ms59768 KiB
35Hibás válasz233ms55732 KiB
36Hibás válasz203ms55768 KiB
37Hibás válasz8ms14288 KiB
38Elfogadva14ms16204 KiB
39Hibás válasz28ms20116 KiB
40Elfogadva7ms14324 KiB
41Hibás válasz8ms14828 KiB
42Elfogadva59ms14188 KiB
43Hibás válasz28ms14188 KiB
44Hibás válasz10ms14252 KiB
45Hibás válasz8ms14416 KiB