题解 | #食物链#

食物链

https://ac.nowcoder.com/acm/problem/16884

#include <iostream>

using namespace std;

int fa[2000010];

int find(int x)
{
    return fa[x] == x ? x : fa[x] = find(fa[x]);
}

void merge(int a, int b)
{
    fa[find(a)] = find(b);
}

int main()
{
    int n, k;
    cin >> n >> k;

    for(int i = 1; i <= 3 * n; i++) fa[i] = i;

    int cnt = 0;
    while(k --)
    {
        int op, x, y;
        cin >> op >> x >> y;

        if(x > n || y > n) {cnt ++; continue;}

        if(op == 1)
        {
            if(find(x) == find(y + n) || find(x) == find(y + 2 * n)) cnt ++;
            else merge(x, y), merge(x + n, y + n), merge(x + 2 * n, y + 2 * n);
        }
        else
        {
            if(find(x) == find(y) || find(x) == find(y + 2 * n)) cnt ++;
            else merge(x, y + n), merge(x + n, y + 2 * n), merge(x + 2 * n, y);
        }
    }

    cout << cnt;

    return 0;
}


考虑使用i, i + n, i + 2n表示i号点是A,B,C
对于每个语句先进行判断,合理则进行合并操作,最后会形成一个形如ABCCA的集合.
全部评论

相关推荐

07-01 17:14
中北大学 Java
兄弟们是真是假
牛客46374834...:我在boss上投java岗从来没成功过
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务