97662024-03-06 13:56:15FulopMateEmezen Rt.cpp17Hibás válasz 0/100363ms61860 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 < 80; 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
3Elfogadva7ms11736 KiB
4Elfogadva7ms11944 KiB
5Elfogadva6ms12168 KiB
6Elfogadva6ms12408 KiB
7Hibás válasz7ms12564 KiB
8Hibás válasz7ms12764 KiB
9Elfogadva7ms12816 KiB
10Hibás válasz6ms12936 KiB
11Hibás válasz6ms12892 KiB
12Elfogadva6ms13024 KiB
13Elfogadva7ms13148 KiB
14Elfogadva7ms13276 KiB
15Elfogadva6ms13248 KiB
16Elfogadva7ms13248 KiB
subtask30/18
17Elfogadva90ms34140 KiB
18Elfogadva228ms56300 KiB
19Elfogadva199ms55348 KiB
20Hibás válasz23ms16280 KiB
21Elfogadva152ms41900 KiB
22Elfogadva229ms52592 KiB
23Elfogadva305ms58700 KiB
24Elfogadva284ms59700 KiB
25Elfogadva293ms61860 KiB
26Elfogadva305ms61800 KiB
subtask40/66
27Hibás válasz23ms16448 KiB
28Hibás válasz41ms21820 KiB
29Elfogadva87ms30976 KiB
30Elfogadva263ms52424 KiB
31Elfogadva363ms61640 KiB
32Elfogadva305ms61652 KiB
33Elfogadva296ms60748 KiB
34Elfogadva337ms59792 KiB
35Hibás válasz224ms55836 KiB
36Hibás válasz224ms55868 KiB
37Hibás válasz8ms14200 KiB
38Elfogadva13ms16084 KiB
39Hibás válasz29ms19928 KiB
40Elfogadva8ms14544 KiB
41Hibás válasz8ms14628 KiB
42Elfogadva71ms14056 KiB
43Hibás válasz35ms14148 KiB
44Hibás válasz16ms14172 KiB
45Hibás válasz13ms14164 KiB