1005

#include <stdio.h>
#include <stdlib.h>
int pre[10010];
int t[10010];

int find(int x)
{//找队长
    int r=x;
    while(r!=pre[r])
        r=pre[r];
    int i=x,j;
    while (pre[i]!=r)
    {//让所有人直属队长
        j=pre[i];
        pre[i]=r;
        i=j;
    }
    return r;
}
void mix(int x,int y)
{//合并编队
    int fx=find(x),fy=find(y);
    if(fx!=fy)
        pre[fy]=fx;
}
int main()
{
    int t,max,q,x,y,u,v,boss,cs;
    long long r;
    char z;
    scanf("%d",&t);
    int n[101];
    int a[10010];
    for(int i=0;i<t;i++)
    {
        scanf("%d",&n[i]);
        cs=n[i];
        for(int j=1;j<=cs;j++)
        {
            scanf("%d",&a[j]);
        }
        for(int j=1;j<=cs;j++)
        {//让每艘战舰都是自己的队长
            pre[j]=j;
        }
        scanf("%d",&q);
        for(int j=0;j<q;j++)
        {
            scanf("%c ",&z);
            if(z!='U' && z!='A')
                j--;//如果不属于指令退回
            if(z=='U')
            {//合并x和y的所属小队
                scanf("%d %d",&x,&y);
                mix(x,y);
            }
            if(z=='A')
            {
                r=0;
                scanf("%d %d",&u,&v);
                boss=find(u);//找到被打舰队的队长
                for(int k=1;k<=cs;k++)
                    if(find(k)==boss)
                        r+=a[k];//把对内所有的战力加起来
                if(r>=v)
                    printf("NB\n");
                else
                    printf("SB\n");
            }
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值