zoukankan      html  css  js  c++  java
  • POJ 2236 Wireless Network

    并查集。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<vector>
    #include<algorithm>
    using namespace std;
    typedef long long LL;
    
    const int maxn=1001+10;
    int n,d;
    vector<int>G[maxn];
    int x[maxn],y[maxn];
    bool flag[maxn];
    int f[maxn];
    
    int DIS(int a,int b)
    {
        return (x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]);
    }
    
    int Find(int x)
    {
        if(x!=f[x]) return f[x]=Find(f[x]);
        return f[x];
    }
    
    int main()
    {
        scanf("%d%d",&n,&d);
        for(int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]);
        for(int i=0;i<=n;i++) flag[i]=0,f[i]=i,G[i].clear();
        for(int i=1;i<=n;i++)
        {
            for(int j=i+1;j<=n;j++)
            {
                if(DIS(i,j)<=d*d)
                {
                    G[i].push_back(j);
                    G[j].push_back(i);
                }
            }
        }
        char op[5];
        while(~scanf("%s",op))
        {
            if(op[0]=='O')
            {
                int b1; scanf("%d",&b1);
                if(flag[b1]==1) continue;
                flag[b1]=1;
    
                for(int i=0;i<G[b1].size();i++)
                {
                    if(flag[G[b1][i]]==0) continue;
                    int f1=Find(b1),f2=Find(G[b1][i]);
                    if(f1!=f2) f[f1]=f2;
                }
            }
            else
            {
                int b1,b2; scanf("%d%d",&b1,&b2);
                int f1=Find(b1),f2=Find(b2);
                if(f1==f2) printf("SUCCESS
    ");
                else printf("FAIL
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    用户体验评价
    第十四周进度总结
    寻找水王
    第十三周进度总结
    第一阶段意见评论
    梦断代码阅读笔记02
    第十二周进度总结
    冲刺(第十天)
    单词统计续
    冲刺(第九天)
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5352563.html
Copyright © 2011-2022 走看看