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!
  • 相关阅读:
    【 js 基础 】【 源码学习 】源码设计 (更新了backbone分析)
    【 js 基础 】【读书笔记】作用域和闭包
    【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用
    入职一个月快速熟悉大型Vue项目经验感想
    Git 实习一个月恍然大悟合集
    不断更新:整理常见的闭包问题
    (转)当margin-top、padding-top的值为百分比时是如何计算的?
    2019年8月面试腾讯前端开发实习生记录
    vue-cli2.X中引入高德地图,将其设为全局对象
    学习整理:用webpack4.x构建基本项目
  • 原文地址:https://www.cnblogs.com/--560/p/4527369.html
Copyright © 2011-2022 走看看