97682024-03-06 13:57:47FulopMateEmezen Rt.cpp17Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva6ms11400 KiB
subtask20/16
2Hibás válasz6ms11656 KiB
3Elfogadva7ms11868 KiB
4Elfogadva6ms12296 KiB
5Elfogadva6ms12220 KiB
6Elfogadva6ms12292 KiB
7Hibás válasz6ms12212 KiB
8Hibás válasz6ms12216 KiB
9Elfogadva6ms12308 KiB
10Hibás válasz6ms12424 KiB
11Hibás válasz6ms12640 KiB
12Elfogadva6ms12584 KiB
13Elfogadva6ms12708 KiB
14Elfogadva6ms12852 KiB
15Elfogadva6ms12928 KiB
16Elfogadva6ms12940 KiB
subtask30/18
17Elfogadva109ms33444 KiB
18Elfogadva223ms55908 KiB
19Elfogadva223ms54780 KiB
20Hibás válasz52ms16628 KiB
21Elfogadva172ms41612 KiB
22Elfogadva234ms52276 KiB
23Elfogadva321ms58520 KiB
24Elfogadva307ms59508 KiB
25Elfogadva330ms61680 KiB
26Elfogadva335ms61620 KiB
subtask40/66
27Hibás válasz56ms17036 KiB
28Hibás válasz72ms22348 KiB
29Elfogadva115ms30848 KiB
30Elfogadva293ms52196 KiB
31Elfogadva449ms61720 KiB
32Elfogadva391ms61816 KiB
33Elfogadva328ms60892 KiB
34Elfogadva317ms59956 KiB
35Hibás válasz204ms56056 KiB
36Hibás válasz200ms55944 KiB
37Hibás válasz7ms14368 KiB
38Elfogadva13ms16252 KiB
39Hibás válasz27ms20024 KiB
40Elfogadva7ms14360 KiB
41Hibás válasz7ms14648 KiB
42Elfogadva109ms14020 KiB
43Hibás válasz61ms14012 KiB
44Hibás válasz34ms14016 KiB
45Hibás válasz28ms14040 KiB