Notice: Undefined index: name in /usr/www/lib/views/home/viewtitle.html on line 188
-完善程序 第 20 题
(并查集)舰队司令莱因哈特率领十万余艘战规出征。名将杨威利组织麾下三万晚战舰迎敌。在这次决战中,他将巴米利恩星域战场划分成30000列,每列依次编号为1,2,...,30000之后,他把自己的战舰也依次编号为1,2,...,30000,让第i号战舰处于第i列(i=1,2,...,3000)。这是初始阵形。杨威利会多次发布合并指令,将大部分战战舰集中在某几列上,实施密集攻击。合并指令为Mi,j,含义为第i号战舰所在的整个战舰队列,作为一个整体(头在前尾在后)接至第j号战舰所在的战舰队列的尾部。在杨威利发布指令调动舰队的同时,莱因哈特也会发出一些询问指令:Ci,j。该指令意思是,询问电脑,杨威利的第i号战舰与第j号战舰当前是否在同一列中, 如果在同一列中,那么它们之间布置有多少战舰。你被要求编写程序分析杨威利的指令,以及回答莱因哈特的询问。
#include <bits/stdc++.h>
using namespace std;
int f[30001], front[30001],num[30001],x,y,i,j, n, T,ans;
char ins;
int find(int n) {
    if (fa[n] == n)
        return fa[n];
    int fn = find(fa[n]);
    ___(1)___;
    return fa[n] = fn;
}
int main() {
    cin>> T;
    for(i=1; i<=30000; ++i) {
        fa[i]= i;
        ___(1)___;
        num[i]=1;
    }
    while(T--) {
        cin>> ins>> x>> y;
        int fx=find(x);
        int fy=find(y);
        if (ins == 'M') {
            front[fx] += num[fy];
            fa[fx]=ty;
            ___(3)___;
            num[fx]=0;
        }
        if(ins =='C') {
            if(___(4)___)
                cout <<"-1" << endl;
            else
                cout <<___(5)___<< endl;
        }
    }
    return 0;
}
● 单选题
第 1 题 ①处应填( )
第 2 题 ②处应填( )
第 3 题 ③处应填( )
第 4 题 ④处应填( )
第 5 题 ⑤处应填( )

解答部分以后会开放。