入门OJ 4192: [Noip模拟题]黑魔法师之门

题目

Description

applepi被囚禁的地点只有一扇门,当地人称它为“黑魔法师之门”。这扇门上画着一张无向无权图,而打开这扇门的密码就是图中【每个点的度数大于零且都是偶数】的子图的个数对1000000009取模的值。此处子图 (V, E) 定义为:点集V和边集E都是原图的任意子集,其中E中的边的端点都在V中。但是Vani认为这样的密码过于简单,因此门上的图是动态的。起初图中只有N个顶点而没有边。Vani建造的门控系统共操作M次,每次往图中添加一条边。你必须在每次操作后都填写正确的密码,才能够打开黑魔法师的牢狱,去拯救伟大的领袖applepi。

Input

第一行包含两个整数NM

接下来M行,每行两个整数AB,代表门控系统添加了一条无向边 (A, B)

N≤200000M≤300000

Output

输出一共M行,表示每次操作后的密码。

题解

一道海星的并查集

主要难度在理解题意上了

代码

#include <cstdio>
#include <vector>
using namespace std;
class UnionFind {
 private:
  int quantity;
  vector<int> union_;
 public:
  UnionFind(const int maximum = 1) {
    union_.assign(maximum + 10, 0);
    quantity = maximum;
    for (register int i(1); i <= maximum; ++i) {
      union_[i] = i;
    }
  }
  inline void Assign(const int &maximum) {
    union_.clear();
    union_.assign(maximum + 10, 0);
    quantity = maximum;
    for (register int i(1); i <= maximum; ++i) {
      union_[i] = i;
    }
  }
  inline int Find(const int &x) {
    return union_[x] == x ? x : union_[x] = Find(union_[x]);
  }
  inline void Merge(const int &u1, const int &u2) {
    const int tmp1(this->Find(u1)), tmp2(this->Find(u2));
    union_[tmp2] = tmp1, union_[u2] = tmp1;
  }
};
UnionFind unions;
const int kMod(1000000009);
int n, m, x, y, ans(1);
int main(int argc ,char **argv) {
  scanf("%d %d", &n, &m);
  unions.Assign(n);
  while (m--) {
    scanf("%d %d", &x, &y);
    if (unions.Find(x) != unions.Find(y))unions.Merge(x, y);
    else ans *= 2;
    if (ans > kMod) ans -= kMod;
    printf("%d\n", ans - 1);
  }
  return 0;
}

原文地址:https://www.cnblogs.com/forth/p/9532909.html

时间: 2024-08-10 02:43:16

入门OJ 4192: [Noip模拟题]黑魔法师之门的相关文章

[BZOJ入门OJ2092][Noip模拟题]舞会

2092: [Noip模拟题]舞会 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 9  Solved: 5 [Submit][Status][Web Board] Description 学校举行舞会啦,一共有N个人参加,所有人站成一排,从左开始编号,最左边的人编号为1 ,最右边的为N.每个人跳舞的熟练度我们用一个整数表示,第i个人的熟练度为Ai,每次熟 练度最接近的一对相邻男女会出列跳舞,如果有多对那么最左边的那一对会先出列,请你给 出出列跳

8.22 NOIP 模拟题

  8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc 4.9.2 fpc 2.6.2 评测环境 64 位 Linux, 3.3GHZ CPU 评测软件 Lemon 评测方式 忽略行末空格和回车 特别注意:c/c++ 选手使用 printf 输出 64 位整数请使用%lld 1 注意事项 A 债务 文件名                            输入文件             输出文件  

刷过一题之黑魔法师之门

经过了16 个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与Violet星球的战争中,由于Z 副官的愚蠢,地球的领袖applepi 被邪恶的黑魔法师Vani 囚禁在了Violet 星球.为了重启Nescafé这一宏伟的科技工程,人类派出了一支由XLk.Poet_shy 和lydrainbowcat 三人组成的精英队伍,穿越时空隧道,去往Violet 星球拯救领袖applepi.applepi 被囚禁的地点只有一扇门,当地人称它为“黑魔法师之门”.这扇门上画着一张无向无权图,而打开这

CODEVS1995 || TYVJ1863 黑魔法师之门

P1863 [Poetize I]黑魔法师之门 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 经过了16个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与Violet星球的战争中,由于Z副官的愚蠢,地球的领袖applepi被邪恶的黑魔法师Vani囚禁在了Violet星球.为了重启Nescafé这一宏伟的科技工程,人类派出了一支由XLk.Poet_shy和lydrainbowcat三人组成的精英队伍,穿越时空隧道,去往Violet星球拯救领袖

黑魔法师之门

并查集 黑魔法师之门 试题描述   经过了16 个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与Violet星球的战争中,由于Z 副官的愚蠢,地球的领袖applepi 被邪恶的黑魔法师Vani 囚禁在了Violet 星球.为了重启Nescafé这一宏伟的科技工程,人类派出了一支由XLk.Poet_shy 和lydrainbowcat 三人组成的精英队伍,穿越时空隧道,去往Violet 星球拯救领袖applepi.applepi 被囚禁的地点只有一扇门,当地人称它为“黑魔法师之门”.

[Poetize I]黑魔法师之门

描述 Description applepi被囚禁的地点只有一扇门,当地 人称它为“黑魔法师之门”.这扇门上画着一张无向无权图,而打开这扇门的密码就是图中[每个点的度数大于零且都是偶数]的子图的个数对 1000000009取模的值.此处子图 (V, E) 定义为:点集V和边集E都是原图的任意子集,其中E中的边的端点都在V中. 但是Vani认为这样的密码过于简单,因此门上的图是动态的.起初图中只有N个顶点而没有边.Vani建造的门控系统共操作M次,每次往图中添加一条边.你必须在每次操作后都填写正确

黑魔法师之门 (magician)-并查集

题目 经过了 16 个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与 Violet 星球的战争中,由于 Z 副官的愚蠢,地球的领袖 applepi 被邪恶的黑魔法师 Vani 囚禁在了 Violet 星球.为了重启 Nescafé这一宏伟的科技工程,人类派出了一支由 XLk.Poet_shy 和 lydrainbowcat 三人组成的精英队伍,穿越时空隧道,去往 Violet 星球拯救领袖 applepi. applepi 被囚禁的地点只有一扇门,当地人称它为“黑魔法师之门”.这扇

noip模拟题题解集

最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数 输入:输入文件只一行,两个正整数N,M( 1<N<50,2≤M≤5) 输出:输出文件只有一个正整数S,表示方案总数. 运用升格思想.设N个坑不会发生爆炸的方案数是f[N],那么我们假设N以前的坑的方案 都已知了,那么我们只需要考虑第N个坑如何放即可(顺

入门OJ 4242: [Noip模拟题]删除

题目 Description Alice上化学课时又分心了,他首先画了一个3行N列的表格,然后把数字1到N填入表格的第一行,保证每个数只出现一次,另外两行他也填入数字1到N,但不限制每个数字的出现次数.Alice现在想删除若干列使得每一行排完序后完全一样,编程计算最少需要删除多少列. Input 第一行包含一个整数N(1<=N<=100000),表示表格的列数. 接下来三行每行包含N个整数,每个数在1到N之间,而且第一行的数互不相同. Output 输出最少需要删除的列数. 题解 水题 每次找