poj2286无线网络

坑死我了,原来时间限制是10s。

既然这样那就很简单了,每修复一个电脑,遍历所有电脑,能连接就连接。并查集,并炸鸡……我这只鸡……大哭抓狂

上代码:

#include
#include
using namespace std;
const int maxn = 1010;
struct node
{
    int x, y;
} p[1010];
bool isr[maxn];
int father[maxn];
int n, d;
char o;

int gf(int x)
{
    if(father[x] == x) return x;
    else return father[x] = gf(father[x]);

    return father[x];
}


void un(int x, int y)
{
    int fx = gf(x), fy = gf(y);

    if(fx == fy) return ;
    else father[fx] = fy;
}


int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("in.txt", "r", stdin);
#endif
    scanf("%d %d", &n, &d);

    for(int i = 1; i <= n; i++)
        scanf("%d %d", &p[i].x, &p[i].y);

    memset(isr, false, sizeof(isr));

    for(int i = 1; i <= n; i++)
        father[i] = i;
    while(scanf("%c", &o) != EOF)
    {
        if(o == 'O')
        {
            int a;
            scanf("%d",&a);
            isr[a] = true; 
            for(int i=1;i<=n;i++)
            if(isr[i])
            {
            	int dx=p[a].x-p[i].x,dy=p[i].y-p[a].y;
            	if(dx*dx+dy*dy<=d*d)
            	   un(a,i);
            }
        }
            else if(o == 'S')
        {    
            int x, y;
            scanf("%d %d", &x, &y);
            if(isr[x] == false || isr[y] == false)
                printf("FAIL\n");
            else
            {
                int fx = gf(x), fy = gf(y);

                if(fx == fy) printf("SUCCESS\n");
                else printf("FAIL\n");
            }
        }
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值