97712024-03-06 14:00:30FulopMateEmezen Rt.cpp17Hibás válasz 0/100990ms61644 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva7ms11136 KiB
subtask20/16
2Hibás válasz6ms11296 KiB
3Elfogadva6ms11556 KiB
4Elfogadva7ms11768 KiB
5Elfogadva6ms12028 KiB
6Elfogadva6ms12240 KiB
7Hibás válasz7ms12492 KiB
8Hibás válasz7ms12512 KiB
9Elfogadva6ms12576 KiB
10Hibás válasz7ms12912 KiB
11Hibás válasz6ms12968 KiB
12Elfogadva6ms13128 KiB
13Elfogadva6ms12996 KiB
14Elfogadva6ms12956 KiB
15Elfogadva6ms13088 KiB
16Elfogadva6ms13016 KiB
subtask30/18
17Elfogadva97ms33652 KiB
18Elfogadva211ms55852 KiB
19Elfogadva211ms54708 KiB
20Hibás válasz601ms16292 KiB
21Elfogadva782ms41444 KiB
22Elfogadva873ms52092 KiB
23Elfogadva634ms58340 KiB
24Elfogadva781ms59508 KiB
25Elfogadva990ms61644 KiB
26Elfogadva948ms61596 KiB
subtask40/66
27Hibás válasz669ms17336 KiB
28Hibás válasz685ms22444 KiB
29Elfogadva731ms30892 KiB
30Elfogadva873ms52276 KiB
31Elfogadva954ms61632 KiB
32Elfogadva980ms61576 KiB
33Elfogadva921ms60664 KiB
34Elfogadva819ms59744 KiB
35Hibás válasz222ms55856 KiB
36Hibás válasz233ms55788 KiB
37Hibás válasz8ms14332 KiB
38Elfogadva19ms16148 KiB
39Hibás válasz34ms19948 KiB
40Elfogadva8ms14336 KiB
41Hibás válasz8ms14524 KiB
42Elfogadva837ms13924 KiB
43Hibás válasz540ms13924 KiB
44Hibás válasz375ms13992 KiB
45Hibás válasz349ms14012 KiB