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

题意:

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

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

思路:

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

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

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

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

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

代码:

#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;
}

  

AKOJ-2010-魔法石的更多相关文章

  1. 牛客OI周赛6-提高组 A 大法师与魔法石

    大法师与魔法石 思路: 对于一个ai, 它可以构成区间[ai/v, ai] 假设和它相邻的为aj, 那么ai 和 aj 构成的区间为[(ai+aj) / v, ai+aj] 那么这两个区间能合并的条件 ...

  2. 洛谷——P2559 [AHOI2002]哈利·波特与魔法石

    P2559 [AHOI2002]哈利·波特与魔法石 题目描述 输入输出格式 输入格式: 文件中第一行有七个数,分别是 S1. S2 . …. S7 :第二行有两个数,依次分别是起点城市 i 和终点城市 ...

  3. RQNOJ魔法石之恋

    魔法石之恋 (stone.pas/c/cpp) [问题描述] 在<Harry Potter and the Sorcerer's Stone>中,想得到魔法石,必须要通过许许多多的测试和游 ...

  4. 洛谷 P2559 [AHOI2002]哈利·波特与魔法石

    P2559 [AHOI2002]哈利·波特与魔法石 题目描述 输入输出格式 输入格式: 文件中第一行有七个数,分别是 S1. S2 . …. S7 :第二行有两个数,依次分别是起点城市 i 和终点城市 ...

  5. 2015年第6本(英文第5本):Harry Potter 1 哈利波特与魔法石

    书名: Harry Potter 1 – Harry Potter and the Sorcerer’s Stone 作者:J.K. Rowling 单词数:7.8万 不重复单词数:6000(我怎么感 ...

  6. [SDOI 2010]魔法猪学院

    Description 题库链接 给出一张 \(n\) 个点 \(m\) 条边有向图,询问最多有多少条不同的路径从 \(1\) 到 \(n\) 并且路径长度和 \(\leq E\) . \(2\leq ...

  7. 解题:SDOI 2010 魔法猪学院

    题面 题外话:神**可持久化左偏树,你谷的人都太神了,学不来 我把这个当做A*模板题的说,先讲一讲个人对A*的理解:如果说普通的BFS是Bellman_Ford,那A*就是一个Dijkstra.以寻找 ...

  8. [AHOI2002]哈利·波特与魔法石

    这道题比较简单,就是一个最短路(SSSP).数据水,用Floyd即可AC.这里用了Dijkstra. #include <iostream> #include <cstdio> ...

  9. 洛谷 P4663 - [BalticOI 2008]魔法石(dp)

    题面传送门 A:我该是有多无聊来写这种题的题解啊 B:大概是因为这题题解区里没有题解所以我来写一篇了,说明我有高尚的济世情怀(大雾 跑题了跑题了 首先看到字典序第 \(i\) 小小可以自然地想到按位决 ...

  10. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解

    喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...

随机推荐

  1. HDU3723 Delta Wave —— 卡特兰数

    题目链接:https://vjudge.net/problem/HDU-3723 Delta Wave Time Limit: 6000/3000 MS (Java/Others)    Memory ...

  2. RTree算法Java实现 JSI RTree Library的调用实例 标签:jsi-rtree-library

    1. [代码]jsi-rtree-library /** *  */package com.mycompany.project; //package net.sourceforge.jsi.examp ...

  3. iOS 键盘遮挡输入框万能解决方案(多个输入框)

    效果图如下: 思路分析: 代码: 知识点: 问题: 效果图如下: 思路分析: 当我们有很多输入框时,有时候键盘弹出来会遮挡着输入框.我们需要获取输入框和键盘相对于最外层视图的位置来判断是否遮挡,如果遮 ...

  4. zoj 2315 New Year Bonus Grant 解题报告

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1315 题目意思:Bill Hates 是公司的老总,她管辖着很多程序 ...

  5. UniCode转码

    <script type="text/javascript"> var GB2312UnicodeConverter = { ToUnicode: function ( ...

  6. vue.js 组件共用函数的方法之一

    如果我现在写一个组件pullMore,想要用到loadMore里面的方法(函数), 那么只需要在当前组件pullMore,script里面先引入组件import loadMore from './lo ...

  7. Git 常用命令学习

    本文转载自:https://buptldy.github.io/2016/03/02/2016-03-02-Git%20Cheat%20Sheet/ 文章 创建版本库 初始化一个Git仓库,使用git ...

  8. Markdown Reader 插件改造

    Markdown Reader 是一款比较好用的浏览markdown文件的chrome插件 插件地址:https://chrome.google.com/webstore/detail/markdow ...

  9. vue-cli创建项目 一直downloading解决办法

    vue-cli创建项目: 1 安装node(需要npm,npm是node的包管理股工具) 2 安装cnpm 3 安装vue-cli       cnpm install vue-cli -g 4 创建 ...

  10. 关于try catch finally的执行顺序解释

    偶然遇到了被问到finally的执行问题,忽然发现一直用的都是try catch 没有用过finally的情况,所以目前总结一下. 先抛出结论: 1.try内部正常执行try的内部逻辑,异常则执行ca ...