TSM

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

요약
각 간선 i에 l_i 이상 r_i 이하의 정수 가중치를 부여해 어떤 최소 스패닝 트리의 비용이 정확히 K가 되도록 만들 수 있는지 판정하고, 가능하면 가중치를 출력한다.
난이도

어려움10점 중 8점

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

문제

가중치 있는 그래프가 주어졌을 때, 최소 스패닝 트리(MST)의 비용을 구하는 문제는 잘 알려져 있습니다. 최소 스패닝 트리의 비용이 주어졌을 때, 그래프의 간선에 가중치를 부여하는 문제를 해결하세요.

자세한 설명은 아래와 같습니다.

  • 최소 스패닝 트리란, 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 비용이 최소인 트리를 뜻합니다. 스패닝 트리의 비용은 트리에 포함된 간선의 가중치 합으로 정의합니다.
  • 주어지는 그래프는 NN개의 정점과 MM개의 간선을 가진 무방향 연결 그래프입니다. 각 정점과 각 간선에는 11번부터 순서대로 번호가 붙어 있습니다. ii번 간선은 u_iu\_i번 정점과 v_iv\_i번 정점을 이으며, ii번 간선에는 l_il\_i 이상 r_ir\_i 이하의 정수 가중치를 부여할 수 있습니다.
  • 각 간선에 적절한 가중치를 부여해서 최소 스패닝 트리의 비용이 KK가 되도록 만드세요.

입력

첫 번째 줄에 그래프의 정점의 수 NN과 간선의 수 MM, 최소 스패닝 트리의 비용 KK가 공백으로 구분되어 주어집니다. (2≤N≤100,000; N−1≤M≤200,000; 0≤K≤1010)(2 \le N \le 100\\, 000;\ N-1 \le M \le 200\\, 000;\ 0 \le K \le 10^{10})

다음 MM개의 줄의 ii번째 줄에 정수 u_i,v_i,l_i,r_iu\_i, v\_i, l\_i, r\_i가 공백으로 구분되어 주어집니다. ii번 간선이 u_iu\_i번 정점과 v_iv\_i번 정점을 이으며, ii번 간선에 l_il\_i 이상 r_ir\_i 이하의 정수 가중치를 부여할 수 있음을 의미합니다. (1≤u_i,v_i≤N; u_i≠v_i; 0≤l_i≤r_i≤100,000)(1 \le u\_i, v\_i \le N;\ u\_i \ne v\_i;\ 0 \le l\_i \le r\_i \le 100\\, 000)

주어지는 그래프는 연결 그래프이며, 서로 다른 간선은 같은 정점 쌍을 잇지 않습니다.

출력

스패닝 트리의 비용이 KK가 되도록 가중치를 부여할 수 있다면 첫 줄에 YES, 불가능하다면 NO를 출력합니다.YES를 출력한 경우 추가로 MM개의 줄을 출력합니다. 그중 ii번째 줄에는 ii번째 간선에 부여할 가중치를 출력합니다.

예제2

  1. 예제 1

    입력
    4 5 10
    1 2 0 5
    1 3 7 9
    1 4 1 6
    2 4 3 4
    3 4 2 2
    
    예상 출력
    YES
    5
    7
    4
    4
    2
    
  2. 예제 2

    입력
    4 5 12
    1 2 0 5
    1 3 7 9
    1 4 1 6
    2 4 3 4
    3 4 2 2
    
    예상 출력
    NO