N(1 \le N \le 1000)N(1≤N≤1000) 头奶牛,编号为 1\sim N1∼N,在参加一个喝茶时间活动。在喝茶时间活动开始之前,已经有 M(1 \le M \le 2,000)M(1≤M≤2,000) 对奶牛彼此认识(是朋友)。第 ii 对彼此认识的奶牛通过两个不相同的整数 A_iA i 和 B_iB i 给定( 1\le A_i \le N; 1 \le B_i \le N)1≤A i ≤N;1≤B i ≤N)。输入数据保证一对奶牛不会出现多次。 在喝茶时间活动中,如果奶牛 ii 和奶牛 jj 有一个相同的朋友奶牛 kk,那么他们会在某次的喝茶活动中去认识对方(成为朋友),从而扩大他们的社交圈。 请判断,在喝茶活动举办很久以后(直到没有新的奶牛彼此认识),Q(1 \le Q \le 100)Q(1≤Q≤100) 对奶牛是否已经彼此认识。询问 jj 包含一对不同的奶牛编号 X_jX j 和 Y_jY j (1 \le X_j \le N; 1 \le Y_j \le N)(1≤X j ≤N;1≤Y j ≤N)。 例如,假设共有 1\sim 51∼5 头奶牛,我们知道 22 号认识 55 号,22 号认识 33 号,而且 44 号认识 55 号;如下图(a)。
时间: 2023-03-25 15:01:43 浏览: 152
这是一道有关奶牛认识关系的组合数学题。在这道题目中,给定了一些初始的奶牛认识关系,并且有一些询问,要求你判断两头奶牛是否在喝茶活动中已经认识。
具体来说,你可以使用并查集维护奶牛之间的认识关系。首先,将每头奶牛看成一个集合,每头奶牛本身就是它所在集合中的一员。然后,遍历所有已经知道的奶牛认识关系,将两头认识的奶牛所在的集合合并。对于每个询问,判断两头奶牛是否在同一个集合中即可。
因此,可以用 O(M\alpha(N))O(Mα(N)) 的时间复杂度完成初始的认识关系的处理,每个询问可以在 O(1)O(1) 的时间内完成,总时间复杂度为 O(M\alpha(N)+Q)O(Mα(N)+Q)。
阅读全文