zoukankan      html  css  js  c++  java
  • 1392. Dreaming of Stars 夜

    http://acm.timus.ru/problem.aspx?space=1&num=1392

    一个森林   每棵树上的节点为一组  然后按照每种顺序输出

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<map>
    #include<vector>
    #include<stack>
    #include<set>
    #include<map>
    #include<queue>
    #include<algorithm>
    #include<cmath>
    #define LL long long
    //#pragma comment(linker, "/STACK:1024000000,1024000000")
    using namespace std;
    
    const int N=1005;
    const int INF=0x3f3f3f3f;
    //typedef pair<int,int>point;
    int head[N],I;
    struct node
    {
        int j,next;
    }side[N*N*2];
    struct point
    {
        int x,y,z;
        int r;
    }mem[N];
    vector<int>vt[N];
    bool visited[N];
    void add(int i,int j)
    {
        side[I].j=j;
        side[I].next=head[i];
        head[i]=I++;
    }
    
    bool Reachable(int i,int j)
    {
        return sqrt(1.0*(mem[i].x-mem[j].x)*(mem[i].x-mem[j].x)+
        (mem[i].y-mem[j].y)*(mem[i].y-mem[j].y)+
        (mem[i].z-mem[j].z)*(mem[i].z-mem[j].z))<double(mem[i].r+mem[j].r);
    
        /*
        int d=0,sum=0;
        if(mem[i].x!=mem[j].x)
        {++sum;d=abs(mem[i].x-mem[j].x);}
        if(mem[i].y!=mem[j].y)
        {++sum;d=abs(mem[i].y-mem[j].y);}
        if(mem[i].z!=mem[j].z)
        {++sum;d=abs(mem[i].z-mem[j].z);}
        if(sum>1)
        return false;
        if(d>=mem[i].r+mem[j].r)
        return false;
        return true;
        */
    }
    
    void Init(int n)
    {
        for(int i=0;i<n;++i)
        {
            scanf("%d %d %d %d",&mem[i].x,&mem[i].y,&mem[i].z,&mem[i].r);
            for(int j=0;j<i;++j)
            {
                if(Reachable(i,j))
                {add(i,j);add(j,i);}
            }
        }
    }
    void dfs(int x,int k)
    {
       visited[x]=true;
       vt[k].push_back(x);
       for(int t=head[x];t!=-1;t=side[t].next)
       {
           int j=side[t].j;
           if(!visited[j])
           {
               dfs(j,k);
           }
       }
    }
    int main()
    {
        //freopen("data.in","r",stdin);
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            memset(head,-1,sizeof(head));
            I=0;
            Init(n);
            memset(visited,false,sizeof(visited));
            for(int i=0;i<n;++i)
            vt[i].clear();
            int m=0;
            for(int i=0;i<n;++i)
            if(!visited[i])
            dfs(i,m++);
            for(int i=0;i<m;++i)
            {
                sort(vt[i].begin(),vt[i].end());
                for(unsigned int j=0;j<vt[i].size();++j)
                {
                    if(j>0)
                    cout<<", ";
                    cout<<vt[i][j];
                }
                cout<<endl;
            }
    
        }
    }
    

      

  • 相关阅读:
    公司上线流程 pushonline_alpha
    关于统计数据
    实习生新手指南1
    菜鸟代码学习散点总结(四)
    菜鸟机器学习散点总结(三)
    菜鸟机器学习散点总结(二)
    springboot 中事件监听模型的一种实现
    java 代码获取视频时长
    spring cloud 服务链路追踪 skywalking 6.1
    windows 中如何定位恶意软件的藏身位置
  • 原文地址:https://www.cnblogs.com/liulangye/p/2866843.html
Copyright © 2011-2022 走看看