4502: 「AHOI / HNOI2018」毒瘤
内存限制:512 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:0
解决:0
题目描述
从前有一名毒瘤。
毒瘤最近发现了量产毒瘤题的奥秘。考虑如下类型的数据结构题:给出一个数组,要求支持若干种奇奇怪怪的修改操作(例如给一个区间内的数同时加上 $c$,或者将一个区间内的数同时开平方根),并且支持询问区间的和。毒瘤考虑了 $n$ 个这样的修改操作,并将它们编号为 $1 \ldots n$。当毒瘤要出数据结构题的时候,他就将这些修改操作中选若干个出来,然后出成一道题。
当然了,这样出的题有可能不可做。通过精妙的数学推理,毒瘤揭露了这些修改操作之间的关系:有 $m$ 对「互相排斥」的修改操作,第 $i$ 对是第 $u_i$ 个操作和第 $v_i$ 个操作。当一道题中同时含有 $u_i$ 和 $v_i$ 这两个操作时,这道题就会变得不可做。另一方面,当一道题中不包含任何「互相排斥」的操作时,这个题就是可做的。此外,毒瘤还发现了一个规律:$m − n$ 是一个很小的数字(参见「数据范围」中的说明),且任意两个修改操作都是连通的。两个修改操作 $a, b$ 是连通的,当且仅当存在若干操作 $t_0, t_1, ... , t_l$,使得 $t_0 = a,t_l = b$,且对任意 $1 \le i \le l$,$t_{i−1}$ 和 $t_i$ 都是「互相排斥」的修改操作。
一对「互相排斥」的修改操作称为互斥对。现在毒瘤想知道,给定值 $n$ 和 $m$ 个互斥对,他一共能出出多少道可做的不同的数据结构题。两个数据结构题是不同的,当且仅当其中某个操作出现在了其中一个题中,但是没有出现在另一个题中。
输入
第一行为正整数 $n, m$。
接下来 $m$ 行,每行两个正整数 $u, v$,代表一对「互相排斥」的修改操作。
输出
输出一行一个整数,表示毒瘤可以出的可做的不同的数据结构题的个数。这个数可能很大,所以只输出模 $998244353$ 后的值。
样例输入 复制
3 2
1 2
2 3
样例输出 复制
5
提示
输入样例2
6 8 1 2 1 3 1 4 2 4 3 5 4 5 4 6 1 6
输出样例2
16
输入样例3
12 18 12 6 3 11 8 6 2 9 10 4 1 8 6 2 11 5 10 6 12 2 9 3 7 6 2 7 3 2 7 3 5 6 2 11 12 1
输出样例3
248
数据范围:|测试点 #|1~4|5~6|7~8|9|10~11|12~14|15~16|17~20| |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| |$n \le$|$20$|$10^5$|$10^5$|$3000$|$10^5$|$3000$|$10^5$|$10^5$| |$m \le$|$n + 10$|$n - 1$|$n$|$n + 1$|$n + 1$|$n + 10$|$n + 7$|$n + 10$|