97672024-03-06 13:56:45FulopMateEmezen Rt.cpp17Hibás válasz 0/100377ms62352 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
1Elfogadva7ms11260 KiB
subtask20/16
2Hibás válasz6ms11516 KiB
3Elfogadva7ms11776 KiB
4Elfogadva6ms11948 KiB
5Elfogadva6ms12164 KiB
6Elfogadva7ms12316 KiB
7Hibás válasz7ms12564 KiB
8Hibás válasz6ms12608 KiB
9Elfogadva6ms12608 KiB
10Hibás válasz6ms12720 KiB
11Hibás válasz7ms12932 KiB
12Elfogadva6ms12892 KiB
13Elfogadva6ms13020 KiB
14Elfogadva6ms13020 KiB
15Elfogadva7ms13272 KiB
16Elfogadva6ms13200 KiB
subtask30/18
17Elfogadva96ms33840 KiB
18Elfogadva224ms56296 KiB
19Elfogadva203ms55300 KiB
20Hibás válasz35ms16432 KiB
21Elfogadva168ms42008 KiB
22Elfogadva243ms52704 KiB
23Elfogadva275ms58952 KiB
24Elfogadva296ms60120 KiB
25Elfogadva358ms62272 KiB
26Elfogadva367ms62224 KiB
subtask40/66
27Hibás válasz39ms17168 KiB
28Hibás válasz57ms22760 KiB
29Elfogadva101ms31572 KiB
30Elfogadva282ms53028 KiB
31Elfogadva370ms62352 KiB
32Elfogadva324ms62340 KiB
33Elfogadva363ms61444 KiB
34Elfogadva377ms60492 KiB
35Hibás válasz206ms56524 KiB
36Hibás válasz204ms56600 KiB
37Hibás válasz7ms14964 KiB
38Elfogadva13ms16856 KiB
39Hibás válasz28ms20656 KiB
40Elfogadva7ms15004 KiB
41Hibás válasz8ms15344 KiB
42Elfogadva86ms14608 KiB
43Hibás válasz43ms14612 KiB
44Hibás válasz23ms14616 KiB
45Hibás válasz17ms14632 KiB