2001: 寻找小组

内存限制:256 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:28 解决:22

题目描述

时间过得真快,转眼间,Fengzee进入高中的第二学期开始了。步入学校,Fengzee发现学校里发生了大变化,老师们为学生们安排了若干个合作学习小组。这是一所很大的学校,有N (1<=N<=100000)名学生,所有学生用1N之间的正整数编号。为了考察同学们的智商和组织能力,老师们贴出的告示上面,并没有明确地写出哪个同学在哪个小组。所有的信息,都是通过这样的句式给出的:“AB是一个小组的。特别地,如果某个同学的编号没有在任何一条信息中出现,很遗憾,他必须一个人组成一个小组。

你的任务是编写一个程序,根据M (1<=M<=100000)条这样的告示信息,计算出整个学校总共有多少个小组,以及给定的T (1<=T<=500)对同学是不是同一小组的成员。因为学生实在太多了,老师们很可能会犯一些小错误,将某两个学生的关系重复描述两次甚至更多,你需要排除这一点的干扰。

输入

你的输入文件(find.in)包含两大部分。第一部分是信息部分,第二部分是提问部分,两部分在文件中相连。信息部分的第一行有两个整数N, M,分别为学生总数以及信息的条数,以下M行每行两个空格分开的整数A, B,意味着编号为AB的两位同学在一个小组。提问部分的第一行为一个整数T,表示总共有T个问题,以下T行每行两个整数P, Q,含义是编号为PQ的两位同学是不是同一小组的?

输出

输出文件(find.out)中,第一行应为整个学校小组的总数,以下T行每行回答一个问题,请依照提问次序,针对每个问题输出“Yes”“No”(不含引号,注意大小写),分别表示个同学在或不在同一个小组。

样例输入 复制

    8 6
    1 2
    3 2
    5 3
    2 3
    4 7
    6 7
    3
    1 3
    7 5
    3 8

样例输出 复制

    3
    Yes
    No 
    No