[ICPC2019上海K] Color Graph - 二分图

Description

给定一个 n 个点 m 条边的无向联通图。让你对边染色,使得染完色之后不存在奇环,且染的边数最大。输出这个最大的边数 \(n \le 16\)

Solution

由于 n 很小,我们暴力枚举二分图的一个部,那么这会唯一对应一个二分子图

#include <bits/stdc++.h>
using namespace std;

#define int long long

void solve()
{
    int n, m;
    cin >> n >> m;
    vector<pair<int, int>> e;
    for (int i = 1; i <= m; i++)
    {
        int u, v;
        cin >> u >> v;
        e.push_back({u, v});
    }
    int ans = 0;
    for (int s = 0; s < (1 << n); s++)
    {
        bitset<19> bs(s << 1);
        int tmp = 0;
        for (auto [u, v] : e)
        {
            if (bs[u] != bs[v])
                ++tmp;
        }
        ans = max(ans, tmp);
    }
    cout << ans << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    int cnt = 0;
    while (t--)
    {
        cout << "Case #" << (++cnt) << ": ";
        solve();
    }
}

相关文章: