스패닝 최소 트리

시간 제한1초메모리 제한1024 MB

요약
정점 N개, 간선 M개이며 가중치가 1부터 M까지 하나씩인 단순 그래프를 만들어 최소 스패닝 트리 가중치 합이 정확히 S가 되도록 하거나, 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
그래프, 최소 신장 트리, 그리디, 수학
정답자
아직 제출이 없습니다

문제

그래프의 스패닝 트리란, 그래프의 모든 정점이 서로 연결되어 있고 사이클이 없는 부분 그래프를 뜻한다. 그래프의 스패닝 트리들 중 간선들의 가중치의 합이 최소가 되는 것을 그 그래프의 최소 스패닝 트리라고 한다. 그래프에서 최소 스패닝 트리를 구하는 대표적인 알고리즘으로 크루스칼 알고리즘과 프림 알고리즘이 있다.

이제 아래의 조건을 만족하는 그래프 GG를 하나 찾아서 출력해보자.

  • 그래프 GG는 NN개의 정점, MM개의 간선으로 이루어진 그래프이다.
  • 그래프 GG에는 자기 자신을 연결하는 간선(self-loop)이 없으며, 임의의 서로 다른 두 정점 사이를 잇는 간선은 최대 하나 존재한다.
  • 그래프 GG의 각 간선에는 가중치가 있으며, 1≤i≤M1\leq i\leq M을 만족하는 모든 정수 ii에 대해 가중치가 ii인 간선이 정확히 한 개 존재한다.
  • 그래프 GG의 최소 스패닝 트리의 간선 가중치 합이 SS이다.

입력

첫 번째 줄에 세 양의 정수 NN, MM, SS가 공백으로 구분되어 주어진다. (2≤N≤100,000;2\leq N\leq 100\\,000; N−1≤M≤min⁡(N(N−1)2,106);N-1\leq M\leq\min\left({{N(N-1)}\over{2}} ,10^6\right); 1≤S≤10121\leq S\leq 10^{12})

출력

입력으로 주어진 N,M,SN,M,S에 대하여 주어진 조건을 만족하는 그래프 GG가 존재하면 MM개 줄에 걸쳐 조건을 만족하는 그래프의 간선들을 출력한다. i(1≤i≤M)i(1\leq i\leq M)번째 줄에는 가중치가 ii인 간선이 연결하는 두 정점의 번호 u_iu\_i, v_iv\_i(1≤u_i,v_i≤N1\leq u\_i,v\_i\leq N)를 공백으로 구분하여 출력한다. (정점 번호의 순서는 상관없다.)

조건을 만족하는 그래프 GG가 여러 개 존재한다면 그 중 하나를 아무거나 출력한다.

만일 조건을 만족하는 그래프 GG가 없다면 첫 번째 줄에 -1을 출력한다.

힌트

어떤 그래프의 정점과 간선 일부로 이루어진 그래프를 그 그래프의 부분 그래프라고 한다.

예제2

  1. 예제 1

    입력
    4 5 7
    
    예상 출력
    1 2
    2 3
    3 1
    4 1
    3 4
    
  2. 예제 2

    입력
    3 2 2
    
    예상 출력
    -1