97702024-03-06 13:59:55FulopMateEmezen Rt.cpp17Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva6ms11296 KiB
subtask20/16
2Hibás válasz7ms11548 KiB
3Elfogadva6ms11720 KiB
4Elfogadva7ms11972 KiB
5Elfogadva6ms12040 KiB
6Elfogadva6ms12108 KiB
7Hibás válasz7ms12208 KiB
8Hibás válasz7ms12408 KiB
9Elfogadva6ms12500 KiB
10Hibás válasz7ms12356 KiB
11Hibás válasz6ms12352 KiB
12Elfogadva6ms12616 KiB
13Elfogadva6ms12564 KiB
14Elfogadva7ms12824 KiB
15Elfogadva7ms13060 KiB
16Elfogadva7ms13172 KiB
subtask30/18
17Elfogadva96ms33748 KiB
18Elfogadva223ms55840 KiB
19Elfogadva222ms54628 KiB
20Hibás válasz150ms16276 KiB
21Elfogadva293ms41168 KiB
22Elfogadva342ms52120 KiB
23Elfogadva379ms58580 KiB
24Elfogadva391ms59544 KiB
25Elfogadva508ms61720 KiB
26Elfogadva449ms61580 KiB
subtask40/66
27Hibás válasz165ms17064 KiB
28Hibás válasz187ms22228 KiB
29Elfogadva232ms30652 KiB
30Elfogadva402ms52104 KiB
31Elfogadva446ms61700 KiB
32Elfogadva446ms61724 KiB
33Elfogadva476ms61056 KiB
34Elfogadva409ms60340 KiB
35Hibás válasz229ms56308 KiB
36Hibás válasz206ms56252 KiB
37Hibás válasz7ms14672 KiB
38Elfogadva14ms16540 KiB
39Hibás válasz28ms20336 KiB
40Elfogadva8ms14724 KiB
41Hibás válasz8ms15040 KiB
42Elfogadva240ms14476 KiB
43Hibás válasz148ms14476 KiB
44Hibás válasz94ms14524 KiB
45Hibás válasz86ms14636 KiB