9771 2024. 03. 06 14:00:30 FulopMate Emezen Rt. cpp17 Hibás válasz 0/100 990ms 61644 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 < 3000; 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 7ms 11136 KiB
subtask2 0/16
2 Hibás válasz 6ms 11296 KiB
3 Elfogadva 6ms 11556 KiB
4 Elfogadva 7ms 11768 KiB
5 Elfogadva 6ms 12028 KiB
6 Elfogadva 6ms 12240 KiB
7 Hibás válasz 7ms 12492 KiB
8 Hibás válasz 7ms 12512 KiB
9 Elfogadva 6ms 12576 KiB
10 Hibás válasz 7ms 12912 KiB
11 Hibás válasz 6ms 12968 KiB
12 Elfogadva 6ms 13128 KiB
13 Elfogadva 6ms 12996 KiB
14 Elfogadva 6ms 12956 KiB
15 Elfogadva 6ms 13088 KiB
16 Elfogadva 6ms 13016 KiB
subtask3 0/18
17 Elfogadva 97ms 33652 KiB
18 Elfogadva 211ms 55852 KiB
19 Elfogadva 211ms 54708 KiB
20 Hibás válasz 601ms 16292 KiB
21 Elfogadva 782ms 41444 KiB
22 Elfogadva 873ms 52092 KiB
23 Elfogadva 634ms 58340 KiB
24 Elfogadva 781ms 59508 KiB
25 Elfogadva 990ms 61644 KiB
26 Elfogadva 948ms 61596 KiB
subtask4 0/66
27 Hibás válasz 669ms 17336 KiB
28 Hibás válasz 685ms 22444 KiB
29 Elfogadva 731ms 30892 KiB
30 Elfogadva 873ms 52276 KiB
31 Elfogadva 954ms 61632 KiB
32 Elfogadva 980ms 61576 KiB
33 Elfogadva 921ms 60664 KiB
34 Elfogadva 819ms 59744 KiB
35 Hibás válasz 222ms 55856 KiB
36 Hibás válasz 233ms 55788 KiB
37 Hibás válasz 8ms 14332 KiB
38 Elfogadva 19ms 16148 KiB
39 Hibás válasz 34ms 19948 KiB
40 Elfogadva 8ms 14336 KiB
41 Hibás válasz 8ms 14524 KiB
42 Elfogadva 837ms 13924 KiB
43 Hibás válasz 540ms 13924 KiB
44 Hibás válasz 375ms 13992 KiB
45 Hibás válasz 349ms 14012 KiB