97692024-03-06 13:58:54FulopMateEmezen Rt.cpp17Hibás válasz 0/100414ms61884 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 < 350; 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álasz6ms11516 KiB
3Elfogadva6ms11604 KiB
4Elfogadva6ms11608 KiB
5Elfogadva7ms11676 KiB
6Elfogadva6ms11892 KiB
7Hibás válasz6ms12132 KiB
8Hibás válasz6ms12212 KiB
9Elfogadva6ms12280 KiB
10Hibás válasz6ms12404 KiB
11Hibás válasz6ms12356 KiB
12Elfogadva6ms12612 KiB
13Elfogadva6ms12568 KiB
14Elfogadva6ms12568 KiB
15Elfogadva6ms12568 KiB
16Elfogadva6ms12704 KiB
subtask30/18
17Elfogadva96ms33456 KiB
18Elfogadva224ms55920 KiB
19Elfogadva200ms54736 KiB
20Hibás válasz79ms16384 KiB
21Elfogadva202ms41484 KiB
22Elfogadva263ms52068 KiB
23Elfogadva342ms58420 KiB
24Elfogadva337ms59508 KiB
25Elfogadva405ms61644 KiB
26Elfogadva414ms61812 KiB
subtask40/66
27Hibás válasz90ms17572 KiB
28Hibás válasz111ms22684 KiB
29Elfogadva148ms31124 KiB
30Elfogadva324ms52572 KiB
31Elfogadva405ms61884 KiB
32Elfogadva370ms61880 KiB
33Elfogadva405ms60856 KiB
34Elfogadva347ms59916 KiB
35Hibás válasz204ms55960 KiB
36Hibás válasz223ms55972 KiB
37Hibás válasz8ms14652 KiB
38Elfogadva14ms16544 KiB
39Hibás válasz28ms20268 KiB
40Elfogadva7ms14608 KiB
41Hibás válasz8ms14796 KiB
42Elfogadva150ms14228 KiB
43Hibás válasz86ms14192 KiB
44Hibás válasz52ms14212 KiB
45Hibás válasz46ms14308 KiB