zoukankan      html  css  js  c++  java
  • Codeforces Round #518 (Div. 2) C. Colored Rooks

    描述

    传送门:我是传送门

    Ivan is a novice painter. He has nn dyes of different colors. He also knows exactly mmpairs of colors which harmonize with each other.

    Ivan also enjoy playing chess. He has 50005000 rooks. He wants to take kk rooks, paint each of them in one of nn colors and then place this kk rooks on a chessboard of size 109×109109×109.

    Let’s call the set of rooks on the board connected if from any rook we can get to any other rook in this set moving only through cells with rooks from this set. Assume that rooks can jump over other rooks, in other words a rook can go to any cell which shares vertical and to any cell which shares horizontal.

    Ivan wants his arrangement of rooks to have following properties:

    • For any color there is a rook of this color on a board;
    • For any color the set of rooks of this color is connected;
    • For any two different colors abab union of set of rooks of color aa and set of rooks of color bb is connected if and only if this two colors harmonize with each other.

    Please help Ivan find such an arrangement.

    输入

    The first line of input contains 22 integers n,m(1n100,0mmin(1000,n(n1)/2)n,m(1≤n≤100,0≤m≤min(1000,n(n−1)/2) — number of colors and number of pairs of colors which harmonize with each other.

    In next mm lines pairs of colors which harmonize with each other are listed. Colors are numbered from 11 to nn. It is guaranteed that no pair occurs twice in this list.

    输出

    Print nn blocks, ithi−th of them describes rooks of ithi−th color.

    In the first line of block print one number ai(1ai5000)ai(1≤ai≤5000) — number of rooks of color ii. In each of next aiai lines print two integers xx and y(1x,y109)(1≤x,y≤109) — coordinates of the next rook.

    All rooks must be on different cells.

    Total number of rooks must not exceed 50005000.

    It is guaranteed that the solution exists.

    样例

    输入

    3 2
    1 2
    2 3

    输出

    2
    3 4
    1 4
    4
    1 2
    2 2
    2 4
    5 4
    1
    5 1

    输入

    3 3
    1 2
    2 3
    3 1

    输出

    1
    1 1
    1
    1 2
    1
    1 3

    输入

    3 1
    1 3

    输出

    1
    1 1
    1
    2 2
    1
    3 1

    Note

    Rooks arrangements for all three examples (red is color 11, green is color 22 and blue is color 33).

    img

    img

    img

    If there are many correct answers you can print any. You should not maximize or minimize the number of rooks.

    思路

    • 首先将点x放到(x,x)上(不需要真放,只需要最后输出即可

    • 点x全部放到x轴=x的这一条线上,每一组相连的都往上放一个

    (具体看代码吧,在纸上画一下就明白了

    代码

    /*
     * ===============================================================
     *
     *       Filename:  C.cpp
     *
     *           Link:
     *
     *        Version:  1.0
     *        Created:  2018/10/25 01时20分24秒
     *       Revision:  none
     *       Compiler:  g++
     *
     *         Author:  杜宁元 (https://duny31030.top/), duny31030@126.com
     *   Organization:  QLU_浪在ACM
     *
     * ===============================================================
     */
    #include <bits/stdc++.h>
    using namespace std;
    #define clr(a, x) memset(a, x, sizeof(a))
    #define rep(i,a,n) for(int i=a;i<=n;i++)
    #define pre(i,a,n) for(int i=n;i>=a;i--)
    #define ll long long
    #define max3(a,b,c) fmax(a,fmax(b,c))
    #define ios ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    const double eps = 1e-6;
    const int INF = 0x3f3f3f3f;
    const int mod = 1e9 + 7;
    const int N = 1010;
    
    vector<int> p[N];
    
    int n,m,x,y;
    int main()
    {
        ios
    #ifdef ONLINE_JUDGE
    #else
            freopen("in.txt","r",stdin);
        // freopen("out.txt","w",stdout);
    #endif
        cin >> n >> m;
        for(int i = 1;i <= m;i++)
        {
            cin >> x >> y;
            p[x].push_back(i+n+1);
            p[y].push_back(i+n+1);
        }
        for(int k = 1;k <= n;k++)
        {
            int tmp = p[k].size();
            cout << tmp+1 << endl;
            cout << k << " " << k << endl;
            for(int i = 1;i <= tmp;i++)
            {
                cout << k << " " << p[k][i-1] << endl;
            }
        }
        fclose(stdin);
        // fclose(stdout);
        return 0;
    }
    
  • 相关阅读:
    CAD2014启动出现loadlibrary failed with error 87
    MFC界面更新实现方法
    easyui tabs update后tab上关闭图标失效的解决方案
    SQLServer
    Socket异步存储示例
    AspNetPager控件分页使用方法
    sqlserver 2008 孤立用户解决方法
    NPOI 2.0 读取、编辑、保存Excel文件
    NPOI 2.0 创建Excel文件
    jQuery.extend 函数详解
  • 原文地址:https://www.cnblogs.com/duny31030/p/14305262.html
Copyright © 2011-2022 走看看