zoukankan      html  css  js  c++  java
  • 【POJ】[2236]Wireless Network

    这里写图片描述
    这里写图片描述

    也是颓废了好几天啊~
    来补一补练习吧

    这一题的思路是结合并查集的操作

    当遇见 ‘O’ 时
    对所有点查找
    找出符合
    1.电脑已修复
    2.与此电脑的距离不大于D
    当满足时
    便可以进行合并操作

    为此需要记录并计算各个点的距离

    遇见S时
    则查找两点是否为同一集合

    PS:
    1.注意吸收换行(getchar();)
    2.单词别打错(别问我怎么知道的……)

    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    int par[1020];
    int rank[1020];
    int find(int m) {
        if(par[m]==m)
            return m;
        else {
            return par[m]=find(par[m]);
        }
    }
    void unite(int x,int y) {
        x=find(x);
        y=find(y);
        if(x==y)
            return;
        else {
            if(rank[x]<rank[y]) {
                par[x]=y;
            } else {
                par[y]=x;
                if(rank[x]==rank[y]) {
                    rank[x]++;
                }
            }
        }
    }
    
    int main() {
        int N,D;
        scanf("%d %d",&N,&D);
        int xy[1020][2];
        int flag[1020];
        memset(flag,0,sizeof(flag));
        for(int i=1; i<=N; i++) {
            par[i]=i;
            rank[i]=0;
        }
        for(int i=1; i<=N; i++) {
            scanf("%d %d",&xy[i][0],&xy[i][1]);
        }
        char c;
        getchar();
        while(scanf("%c",&c)!=EOF) {
            if(c=='O') {
                int t;
                scanf("%d",&t);
                flag[t]=1;
                for(int i=1; i<=N; i++) {
                    if(flag[i]==1&&i!=t) {
                        if((xy[i][0]-xy[t][0])*(xy[i][0]-xy[t][0])+(xy[i][1]-xy[t][1])*(xy[i][1]-xy[t][1])<=D*D) {
                            unite(i,t);
                        }
                    }
                }
            } else if(c=='S') {
                int p1,p2;
                scanf("%d %d",&p1,&p2);
                if(find(p1)==find(p2)) {
                    printf("SUCCESS
    ");
                } else
                    printf("FAIL
    ");
            }
            getchar();
        }
        return 0;
    }

    题目地址:【POJ】[2236]Wireless Network

  • 相关阅读:
    jdbc基础
    DAO模式(单表)
    window对象
    抽象类VS接口
    sql语句
    JS弹框计算
    HBML表单
    【mysql】:mysql性能优化总结
    【java】:多线程面试题
    spring multipart源码分析:
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569808.html
Copyright © 2011-2022 走看看