mirror of
https://git.sb/baoshuo/OI-codes.git
synced 2024-12-25 17:32:01 +00:00
69 lines
1.0 KiB
Go
69 lines
1.0 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
const mod = 998244353
|
||
|
|
||
|
var fa [4000005]int
|
||
|
|
||
|
func main() {
|
||
|
scanner := bufio.NewScanner(os.Stdin)
|
||
|
|
||
|
scanner.Scan()
|
||
|
raw := strings.Split(scanner.Text(), " ")
|
||
|
n, _ := strconv.Atoi(raw[0])
|
||
|
m, _ := strconv.Atoi(raw[1])
|
||
|
|
||
|
for i := 1; i <= n; i++ {
|
||
|
fa[i] = i
|
||
|
}
|
||
|
|
||
|
ans := 0
|
||
|
|
||
|
for i := 1; i <= m; i++ {
|
||
|
scanner.Scan()
|
||
|
raw := strings.Split(scanner.Text(), " ")
|
||
|
op, _ := strconv.Atoi(raw[0])
|
||
|
u, _ := strconv.Atoi(raw[1])
|
||
|
v, _ := strconv.Atoi(raw[2])
|
||
|
|
||
|
if op == 0 {
|
||
|
merge(u, v)
|
||
|
} else { // op == 1
|
||
|
ans <<= 1
|
||
|
ans |= bool2int(find(u) == find(v))
|
||
|
ans %= mod
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fmt.Println(ans)
|
||
|
}
|
||
|
|
||
|
func find(x int) int {
|
||
|
if fa[x] == x {
|
||
|
return x
|
||
|
}
|
||
|
|
||
|
fa[x] = find(fa[x])
|
||
|
|
||
|
return fa[x]
|
||
|
}
|
||
|
|
||
|
func merge(x int, y int) {
|
||
|
fa[find(x)] = find(y)
|
||
|
}
|
||
|
|
||
|
func bool2int(x bool) int {
|
||
|
if x {
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
return 0
|
||
|
}
|