关闭

LightOJ 1009 Back to Underworld

159人阅读 评论(0) 收藏 举报

贪心+搜索

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

int fa[20005];
vector<int> g[20005];

int bfs(int start)
{
    int cnt[2] = {0};
    queue<int> q;
    q.push(start); fa[start] = 0; cnt[0]++;
    while(!q.empty())
    {
        int p = q.front(); q.pop();
        for(int i = 0; i < g[p].size(); i++)
        {
            int k = g[p][i];
            if(fa[k] == -1)
                q.push(k), fa[k] = fa[p]^1, cnt[fa[k]]++;
        }
    }
    return max(cnt[0], cnt[1]);
}

int main()
{
    int T;
    scanf("%d", &T);

    for(int ca = 1; ca <= T; ca++)
    {
        for(int i = 1; i <= 20000; i++)
            g[i].clear(), fa[i] = 0;

        int n, a, b;
        scanf("%d", &n);
        for(int i = 0; i < n; i++)
        {
            scanf("%d%d", &a, &b);
            fa[a] = fa[b] = -1;
            g[a].push_back(b);
            g[b].push_back(a);
        }

        int ans = 0;
        for(int i = 1; i <= 20000; i++)
            if(fa[i] == -1) ans += bfs(i);

        printf("Case %d: %d\n", ca, ans);
    }

    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13231次
    • 积分:1060
    • 等级:
    • 排名:千里之外
    • 原创:96篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类