题号:NC21887
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
真相永远只有一个,大家都知道ACM界的tokitsukaze大佬喜欢女装,有一天tokitsukaze大佬的女装照片泄露了,已知最开始拥有tokitsukaze大佬的女装照的只有一个人(犯人)并且通过这个人将照片传播开来。害羞的tokitsukaze大佬因此抓捕了一群嫌疑人,这群人内可能没有或者只有一个最初的犯人。并通过逼供知道了这群人之中哪些人拥有照片,哪些人没有照片。然后这些人中部分人拥有一个传播关系——如果他得到照片之后一定会转发给一些自己的熟人,这样这个照片到最后会被“一传十,十传百”。现在tokitsukaze知道这群被抓捕的人里面的每个人传播关系,tokitsukaze想问你在逼供的过程中这些人中有没有人在说谎(没有照片秘密谎称自己有,有照片谎称没照片,我们都认为是在说谎)。默认不存在矛盾就是没有人在说谎,若存在除了给定关系之外的传播关系,那么我们认为是有人在说谎。"不保证没有重边(多次发送照片),或者自环(自己给自己转发一遍)"
输入描述:
首先输入一个T,表示T组案例(T<=25)。每组案例先输入两个数字N,M表示有N个人,M个关系(1<=N<=10^5;0<=M<=10^6)。然后一行包含N个bool型数字(0或者1),第i个数字是0代表第i个人不知道秘密,1代表知道秘密。然后M行,每行两个数字P和Q,代表第P个人知道秘密之后一定会告诉第Q个人(1<=P,Q<=N)。人的编号从1开始。
输出描述:
输出"yinyinyin"代表有人在说谎,输出"hahaha"代表没人在说谎。
示例1
输入
复制
21
1 0
1
1 0
0
2 1
1 1
1 2
2 1
1 0
1 2
2 1
0 1
1 2
7 7
1 1 1 1 1 1 1
1 2
2 3
4 1
2 4
3 4
4 5
5 3
7 7
0 0 0 0 0 0 1
1 2
2 3
4 1
2 4
3 4
4 5
5 3
5 7
1 1 1 1 1
1 2
2 3
4 1
2 4
3 4
4 5
5 3
6 8
1 1 1 1 1 0
1 2
2 3
4 1
2 4
3 4
4 5
5 3
6 1
6 8
1 1 1 1 1 0
1 2
2 3
4 1
2 4
3 4
4 5
5 3
1 6
6 9
1 1 1 0 1 1
1 2
2 3
4 1
2 4
3 4
4 5
5 3
6 1
5 6
6 9
0 0 0 0 0 0
1 2
2 3
4 1
2 4
3 4
4 5
5 3
6 1
5 6
7 10
0 0 0 0 0 0 1
1 2
2 3
4 1
2 4
3 4
4 5
5 3
6 1
5 6
5 7
9 11
0 0 0 1 1 1 0 0 0
1 2
2 3
3 1
3 4
4 5
5 6
6 4
6 7
7 8
8 9
9 7
9 11
0 0 0 1 1 1 1 1 1
1 2
2 3
3 1
3 4
4 5
5 6
6 4
6 7
7 8
8 9
9 7
9 11
0 0 0 0 1 1 1 1 1
1 2
2 3
3 1
3 4
4 5
5 6
6 4
6 7
7 8
8 9
9 7
12 16
1 1 1 1 1 1 1 1 1 0 0 0
1 2
2 3
3 1
3 4
4 5
5 6
6 4
6 7
7 8
8 9
9 7
2 11
10 11
11 12
12 10
12 8
12 16
0 0 0 1 1 1 1 1 1 0 0 0
1 2
2 3
3 1
3 4
4 5
5 6
6 4
6 7
7 8
8 9
9 7
2 11
10 11
11 12
12 10
12 8
4 4
0 0 1 1
1 2
2 1
1 3
2 4
4 4
0 1 1 1
1 2
2 1
1 3
2 4
4 4
1 1 1 1
1 2
2 1
1 3
2 4
输出
复制
hahaha
hahaha
hahaha
yinyinyin
hahaha
yinyinyin
hahaha
hahaha
hahaha
yinyinyin
yinyinyin
hahaha
hahaha
yinyinyin
hahaha
yinyinyin
yinyinyin
hahaha
yinyinyin
yinyinyin
hahaha
说明
样例很强,爱信不信,如果过了这么良心、全面的案例还是WA了,可以考虑是重边或者自环或者一些小细节的处理有问题