zoukankan      html  css  js  c++  java
  • 早晨训练赛第一场 C题

    早晨训练赛第一场 C题

    C - Searching for Graph
    Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

    Description

    Let's call an undirected graph of n vertices p-interesting, if the following conditions fulfill:

    • the graph contains exactly 2n + p edges;
    • the graph doesn't contain self-loops and multiple edges;
    • for any integer k (1 ≤ k ≤ n), any subgraph consisting of k vertices contains at most 2k + p edges.

    subgraph of a graph is some set of the graph vertices and some set of the graph edges. At that, the set of edges must meet the condition: both ends of each edge from the set must belong to the chosen set of vertices.

    Your task is to find a p-interesting graph consisting of n vertices.

    Input

    The first line contains a single integer t (1 ≤ t ≤ 5) — the number of tests in the input. Next t lines each contains two space-separated integers: np (5 ≤ n ≤ 24; p ≥ 0; ) — the number of vertices in the graph and the interest value for the appropriate test.

    It is guaranteed that the required graph exists.

    Output

    For each of the t tests print 2n + p lines containing the description of the edges of a p-interesting graph: the i-th line must contain two space-separated integers ai, bi (1 ≤ ai, bi ≤ nai ≠ bi) — two vertices, connected by an edge in the resulting graph. Consider the graph vertices numbered with integers from 1 to n.

    Print the answers to the tests in the order the tests occur in the input. If there are multiple solutions, you can print any of them.

    Sample Input

    Input
    1
    6 0
    Output
    1 2
    1 3
    1 4
    1 5
    1 6
    2 3
    2 4
    2 5
    2 6
    3 4
    3 5
    3 6
    题意:定义一个n个顶点的p-interesting图为:边数为2*n+p,且任意一个k个顶点的子图的边数小于等于2*k+p。(图中没有自回路和多重边)
    思路:看样例都可以看出规律吧。。。按样例的方式建图,最坏情况子图顶点为1,2,...k时边数最多,然而显然此时的边数还是不超过2*k+p,因为该子图和原图是同种形式的。因此只要按字典序从小到大遍历边,直到边数超过2*n+p为止。
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    
    using namespace std;
    
    const int maxn=1000100;
    const int INF=(1<<29);
    
    int T;
    int n,p;
    
    int main()
    {
        cin>>T;
        while(T--){
            cin>>n>>p;
            int cnt=0;
            bool flag=0;
            for(int i=1;i<n;i++){
                for(int j=i+1;j<=n;j++){
                    cout<<i<<" "<<j<<endl;
                    cnt++;
                    if(cnt==2*n+p) flag=1;
                    if(flag) break;
                }
                if(flag) break;
            }
        }
        return 0;
    }
    View Code


    没有AC不了的题,只有不努力的ACMER!
  • 相关阅读:
    用Instant client批量安装Oracle客户端安装配置
    Oracle case when 用法(转)
    C# 读写ini文件 【转】
    oracle数据库删除数据Delete语句和Truncate语句的对比
    C#使用instantclient连接 Oracle 10g (转)
    SQL Server CONVERT() 函数
    c#格式化数字(转)
    InstantClient安装使用 (转)
    C# 四个字节十六进制数和单精度浮点数之间的相互转化
    oracle case when的使用方法
  • 原文地址:https://www.cnblogs.com/--560/p/4527369.html
Copyright © 2011-2022 走看看