97602024-03-06 13:51:29FulopMateEmezen Rt.cpp17Hibás válasz 0/1001.082s55740 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();
    }

    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);
    for (int it = 0; it < n/50; 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álasz6ms11448 KiB
3Elfogadva6ms11820 KiB
4Elfogadva6ms11832 KiB
5Elfogadva6ms11916 KiB
6Elfogadva6ms11924 KiB
7Hibás válasz6ms12028 KiB
8Hibás válasz6ms12036 KiB
9Elfogadva6ms12152 KiB
10Hibás válasz6ms11888 KiB
11Hibás válasz6ms12140 KiB
12Elfogadva6ms12088 KiB
13Elfogadva6ms12340 KiB
14Elfogadva6ms12556 KiB
15Elfogadva6ms12940 KiB
16Elfogadva6ms12848 KiB
subtask30/18
17Elfogadva96ms33472 KiB
18Elfogadva228ms55676 KiB
19Elfogadva226ms54412 KiB
20Elfogadva510ms15672 KiB
21Időlimit túllépés1.075s21884 KiB
22Időlimit túllépés1.055s27264 KiB
23Időlimit túllépés1.069s30468 KiB
24Időlimit túllépés1.064s30984 KiB
25Időlimit túllépés1.06s32288 KiB
26Időlimit túllépés1.064s32336 KiB
subtask40/66
27Elfogadva726ms17232 KiB
28Időlimit túllépés1.075s12640 KiB
29Időlimit túllépés1.062s16768 KiB
30Időlimit túllépés1.082s27288 KiB
31Időlimit túllépés1.067s32308 KiB
32Időlimit túllépés1.072s32388 KiB
33Időlimit túllépés1.077s31868 KiB
34Időlimit túllépés1.064s31360 KiB
35Elfogadva244ms55740 KiB
36Elfogadva256ms55700 KiB
37Elfogadva8ms14492 KiB
38Elfogadva14ms16192 KiB
39Elfogadva28ms19992 KiB
40Elfogadva7ms14328 KiB
41Elfogadva7ms14616 KiB
42Elfogadva59ms16476 KiB
43Hibás válasz28ms15140 KiB
44Hibás válasz14ms14044 KiB
45Hibás válasz8ms14000 KiB