P10678 『STA - R6』月

blind5883發表於2024-07-14

P10678 『STA - R6』月 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)

挺意外的一個題,從黃色到藍色。

貪心思想比較好想,儘量把度數多的連在一起。這樣會形成一箇中心聚集的圖,就可以使得最長直徑儘量小。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 200010;

int n, m;

struct Node
{
    int x, id;
    
    bool operator<(const Node &W)const
    {
        return W.x < x;
    }
}g[N];

int main()
{
    int T;
    cin >> T;
    
    while (T -- )
    {
        cin >> n;
        for (int i = 1; i <= n; i ++ )
        {
            int a, b;
            cin >> a;
            g[i] = {a, i};
        }
        sort(g + 1, g + 1 + n);
        
        int last = 2;
        for (int i = 1; i <= n; i ++ )
        {
            for (int j = 1; j <= g[i].x; j ++ )
            {
                if (last > n) continue;
                printf("%d %d\n", g[last].id, g[i].id);
                g[last].x -- ;
                last ++ ;
            }
        }
    }
    
    return 0;
}

相關文章