3.冰阔落 I老王喜欢喝冰阔落。初始时刻,桌面上有n杯阔落,编号为1到n。老王总想把其中一杯阔落倒到另一杯中,这样他一次性就能喝很多很多阔落,假设杯子的容量是足够大的。有m 次操作,每次操作包含两个整数x与y。若原始编号为x 的阔落与原始编号为y的阔落已经在同一杯,请输出"Yes";否则,我们将原始编号为y 所在杯子的所有阔落,倒往原始编号为x 所在的杯子,并输出"No"。最后,老王想知道哪些杯子有冰阔落。 时间限制:10000内存限制:65536输入有多组测试数据,少于 5 组。 每组测试数据,第一行两个整数 n, m (n, m<=50000)。接下来 m 行,每行两个整数 x, y (1<=x, y<=n)。输出每组测试数据,前 m 行输出 "Yes" 或者 "No"。 第 m+1 行输出一个整数,表示有阔落的杯子数量。 第 m+2 行有若干个整数,从小到大输出这些杯子的编号。样例输入```3 21 22 14 21 24 3```样例输出```NoYes21 3 NoNo21 4```
br />对于每组测试数据,首先进行m次操作,每次操作根据题目要求判断x和y是否已经在同一杯,如果已经在同一杯则输出"Yes",否则将y所在杯子的所有阔落倒往x所在的杯子,并输出"No"。最后统计有阔落的杯子数量,并输出这些杯子的编号。
【喵呜刷题小喵解析】对于每组测试数据,首先读取n和m的值,然后进行m次操作。每次操作读取x和y的值,判断x和y是否已经在同一杯,如果已经在同一杯则输出"Yes",否则将y所在杯子的所有阔落倒往x所在的杯子,并输出"No"。对于判断x和y是否已经在同一杯,可以使用一个数组或者哈希表来记录每个杯子中是否有阔落。对于每次操作,如果x和y已经在同一杯,则输出"Yes",否则将y所在杯子的所有阔落倒往x所在的杯子,即将y所在杯子的阔落标记删除,同时在x所在杯子中添加y的标记。最后,统计有阔落的杯子数量,并输出这些杯子的编号。可以使用一个计数器来记录有阔落的杯子数量,同时使用一个数组或者哈希表来记录每个杯子中是否有阔落。对于每个杯子,如果有阔落,则将其编号输出,并将计数器加1。需要注意的是,由于有多组测试数据,需要在每组测试数据之间清空数组或者哈希表,避免相互影响。同时,由于每组测试数据的n和m的值较大,需要使用高效的算法来处理。