zoukankan      html  css  js  c++  java
  • codeforces 263C

    C. Circle of Numbers
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    One day Vasya came up to the blackboard and wrote out n distinct integers from 1 to n in some order in a circle. Then he drew arcs to join the pairs of integers (a, b(a ≠ b), that are either each other's immediate neighbors in the circle, or there is number c, such that aand с are immediate neighbors, and b and c are immediate neighbors. As you can easily deduce, in the end Vasya drew n arcs.

    For example, if the numbers are written in the circle in the order 1, 2, 3, 4, 5 (in the clockwise direction), then the arcs will join pairs of integers (1, 2), (2, 3), (3, 4), (4, 5), (5, 1), (1, 3), (2, 4), (3, 5), (4, 1) and (5, 2).

    Much time has passed ever since, the numbers we wiped off the blackboard long ago, but recently Vasya has found a piece of paper with n written pairs of integers that were joined with the arcs on the board. Vasya asks you to find the order of numbers in the circle by these pairs.

    Input

    The first line of the input contains a single integer n (5 ≤ n ≤ 105) that shows, how many numbers were written on the board. Next nlines contain pairs of integers aibi (1 ≤ ai, bi ≤ nai ≠ bi) — the numbers that were connected by the arcs.

    It is guaranteed that no pair of integers, connected by a arc, occurs in the input more than once. The pairs of numbers and the numbers in the pairs are given in the arbitrary order.

    Output

    If Vasya made a mistake somewhere and there isn't any way to place numbers from 1 to n on the circle according to the statement, then print a single number "-1" (without the quotes). Otherwise, print any suitable sequence of n distinct integers from 1 to n.

    If there are multiple solutions, you are allowed to print any of them. Specifically, it doesn't matter which number you write first to describe the sequence of the order. It also doesn't matter whether you write out the numbers in the clockwise or counter-clockwise direction.

    Sample test(s)
    input
    5
    1 2
    2 3
    3 4
    4 5
    5 1
    1 3
    2 4
    3 5
    4 1
    5 2
    output
    1 2 3 4 5 
    input
    6
    5 6
    4 3
    5 3
    2 4
    6 1
    3 1
    6 2
    2 5
    1 4
    3 6
    1 2
    4 5
    output
    1 2 4 5 3 6 

    任意三点都能组成环,

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<cstdlib>
    #include<string>
    #include<vector>
    #include<stack>
    #include<set>
    #include<queue>
    #include<map>
    using namespace std;
    vector<int> e[200010],ans;
    map<int,bool> vis[200010];
    bool mark[200010];
    int n;
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<2*n;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            e[x].push_back(y);
            e[y].push_back(x);
            vis[x][y]=true;
            vis[y][x]=true;
        }
        for(int i=1;i<=n;i++)
            if (e[i].size()!=4)
            {
                printf("-1
    ");
                return 0;
            }
        int x=1,y=1;
        for(int i=0;i<n;i++)
        {
            bool flag=false;
            mark[x]=true;
            ans.push_back(x);
            for (int j=0;j<4;j++)
            {
                int num=0;
                int cur=e[x][j];
                for(int k=0;k<4;k++)
                    if (vis[x][e[cur][k]])
                        num++;
                if (num>1&&!mark[cur]&&vis[y][cur])
                {
                    y=x;
                    x=cur;
                    flag=true;
                    break;
                }
            }
            if (!flag&&i+1!=n)
            {
                printf("-1
    ");
                return 0;
            }
        }
        for(int i=0;i<n;i++)
            printf("%d ",ans[i]);
        printf("
    ");
        return 0;
    }
    

      

  • 相关阅读:
    “.NET研究”带你走进缓存世界 狼人:
    晚绑定场景下对象属性赋值和取值可以不需要Pro“.NET研究”pertyInfo 狼人:
    一“.NET研究”句代码实现批量数据绑定[下篇] 狼人:
    使用WC“.NET研究”F实现SOA面向服务编程——简单的WCF开发实例 狼人:
    在ASP.NET MVC3中使用“.NET研究”EFCodeFirst 1.0 狼人:
    一句代码实现批量“.NET研究”数据绑定[下篇] 狼人:
    在ASP.NET M“.NET研究”VC3 中利用JSONP跨域登录WEB系统 狼人:
    一句代码实现批量数“.NET研究”据绑定[上篇] 狼人:
    转发重定向Servlet之请求转发与重定向区别
    估计实例R语言: 极大似然估计实例
  • 原文地址:https://www.cnblogs.com/water-full/p/4548121.html
Copyright © 2011-2022 走看看