AKOJ-2010-魔法石

链接:https://oj.ahstu.cc/JudgeOnline/problem.php?id=2010

题意:

Vyoung最近收集到一大批魔法石,这些魔法石有两种特性,攻击和防守,不同特性的两个魔法石可以组合在一起形成威力巨大的武器(正确的组合),现在给你m对魔法石,检查其中有多少对与之前的组合矛盾,即组合错误的魔法石

注意组合错误即是:相同特性的魔法石是一个组合,或者自己与自己组合

思路:

带权并查集,才学的成果。

Rank数组保存i与Father[i]的关系。因为只有两种,所以用0表示同种,1表示不同种。

同理,找父亲的时候更新Rank数组。因为每个位置与父节点肯定是不同,所以初始为1。

每个点与父节点的关系,加上父节点与根节点的关系,mod2,即为每个点与根节点的关系。

而合并连个集合时。因为两个点的关系肯定为1,所以找到每个点与父节点的关系即可。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <memory.h>
#include <string>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
#include <queue>
#include <math.h>
using namespace std;
const int MAXN = 50000+10;
int Father[MAXN],Rank[MAXN];
int n,m;
 
void Init()
{
    for (int i = 1;i<=n;i++)
    {
        Father[i] = i;
        Rank[i] = 0;
    }
}
 
int Get_F(int x)
{
    if (Father[x] == x)
        return x;
    int tmp = Father[x];
    Father[x] = Get_F(Father[x]);
    Rank[x] = (Rank[x] + Rank[tmp])%2;//当前点与根节点的关系为当前点与父节点和父节点与根节点
    return Father[x];
}
 
void Union(int l,int r)
{
    int fl = Get_F(l);
    int fr = Get_F(r);
    Father[fr] = fl;
    Rank[fr] = (Rank[l] + 1 + Rank[r])%2;
}
 
int main()
{
    int t;
    int cnt = 0,sum;
    int l,r;
    scanf("%d",&t);
    while (t--)
    {
        sum = 0;
        scanf("%d%d",&n,&m);
        Init();
        for (int i = 1;i<=m;i++)
        {
            scanf("%d%d",&l,&r);
            int fl = Get_F(l);
            int fr = Get_F(r);
            if (fl == fr && Rank[l] == Rank[r])
                sum++;
            else
                Union(l,r);
        }
        printf("Case #%d: %d\n",++cnt,sum);
    }
 
 
    return 0;
}

  

posted @   YDDDD  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· Tinyfox 简易教程-1:Hello World!
点击右上角即可分享
微信分享提示