zoukankan      html  css  js  c++  java
  • 1358. Cables 夜

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

    画一个方格阵  按一定次序 依次放节点就可以了

    代码:

    #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 X[N],Y[N];
    struct node
    {
        int j,next;
    }side[N*2];
    int head[N],I;
    bool visited[N];
    void add(int i,int j)
    {
        side[I].j=j;
        side[I].next=head[i];
        head[i]=I++;
    }
    void init(int n)
    {
        memset(head,-1,sizeof(head));
        I=0;
        for(int i=1;i<n;++i)
        {
            int l,r;
            scanf("%d %d",&l,&r);
            add(l,r);
            add(r,l);
        }
    }
    void solve(int n)
    {
        memset(visited,false,sizeof(visited));
        queue<int>qt;
        vector<int>vt;
        qt.push(1);
        visited[1]=true;
        X[1]=1;
        Y[1]=1;
        int l=1;
        while(true)
        {
            vt.clear();
            while(!qt.empty())
            {
                int x=qt.front();qt.pop();
                for(int t=head[x];t!=-1;t=side[t].next)
                {
                    int j=side[t].j;
                    if(!visited[j])
                    {
                        visited[j]=true;
                        vt.push_back(j);
                    }
                }
            }
            if(vt.size()==0)
            break;
            l=l+2;
            while(true)
            {
                int tmp=(l>n)?(n+n-l):l;
                if(tmp>=vt.size())
                break;
                ++l;
            }
            int x,y;
            if(l<=n)
            {x=l;y=1;}
            else
            {x=n;y=l-n+1;}
            for(unsigned int i=0;i<vt.size();++i)
            {
                X[vt[i]]=x;
                Y[vt[i]]=y;
                qt.push(vt[i]);
                --x;++y;
            }
        }
    }
    int main()
    {
        //freopen("data.in","r",stdin);
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            init(n);
            solve(n);
            for(int i=1;i<=n;++i)
            printf("%d %d\n",X[i],Y[i]);
        }
    }
    

      

  • 相关阅读:
    用弦截法求解方程的根
    Fibonacci_array
    爱你所爱,行你所行
    Visual Studio安装Visual Assist的办法(兼容VS2010至VS2017)
    对集合类型属性的实体类的查询集的封装
    简单购物选择案例--纯js代码
    静态json数据表格渲染展示
    js之全选,反选,全不选案例
    常见IO流简介
    JDBC一般流程
  • 原文地址:https://www.cnblogs.com/liulangye/p/2866946.html
Copyright © 2011-2022 走看看