문제
당신은 모든 정점에 정수 가중치를 부여해야 한다.
정점에 가중치를 부여하는 총 비용은 각 정점의 가중치의 절댓값의 합, 즉
그래프의 균형이 맞으려면, 각 간선이 연결하고 있는 두 정점의 가중치의 합이 간선의 가중치와 같아야 한다. 즉, 모든
예를 들어, 아래와 같이
아래의 그림과 같이 각 정점에 [2, -7, 3, -5, 0]의 가중치를 부여해서, 각 간선이 연결하고 있는 두 정점의 가중치의 합이 간선의 가중치와 같게 할 수 있다. 아래 그림에서 정점을 나타내는 원 안에 적힌 수는 정점의 가중치이다.
총 비용은
아래와 같이 각 정점에 [6, -3, -1, -9, 4]의 가중치를 부여해도 균형이 맞는 그래프가 되지만, 이 경우 총 비용은
그래프의 균형이 맞도록 정점에 가중치를 부여하는 것이 가능한지 확인하고, 가능하다면 그 중 총 비용을 최소화하는 방법을 하나 구하는 프로그램을 작성하라.
참고
입력
첫째 줄에
다음
제약 조건
주어지는 모든 수는 정수이다.
2 ≤ N ≤ 100\,000 1 ≤ M ≤ 200\,000 모든
j (1 ≤ j ≤ M )에 대해:1 ≤ a_j ≤ N ,1 ≤ b_j ≤ N a_j ≠ b_j . 즉, 서로 같은 두 정점을 연결하는 간선은 없다.−1\,000\,000 ≤ c_j ≤ 1\,000\,000
모든
j ,k (1 ≤ j < k ≤ M )에 대해,\{a_j , b_j\} ≠ \{a_k, b_k\} . 즉, 서로 다른 두 정점 쌍(a, b) 를 잇는 간선은 많아야 한 개 존재한다.그래프는 연결 그래프이다. 즉, 그래프에서 어떤 두 정점을 골라도, 간선들을 통해 두 정점을 직, 간접적으로 잇는 경로가 존재한다.
출력
만약 그래프의 균형이 맞도록 정점에 정수 가중치를 부여하는 방법이 존재한다면:
첫째 줄에
Yes를 출력한다. 출력은 대소문자를 구분하지 않는다.둘째 줄에 각 정점에 부여한 가중치를 나타내는
N 개의 정수x_1 ,x_2 , . . .,x_N 을 공백 하나씩 사이에 두고 출력한다. 그래프의 균형이 맞도록 하면서 총 비용을 최소화하는 방법이 여럿 존재한다면, 그러한 방법들 가운데 어떤 것을 출력해도 된다.
만약 그래프의 균형이 맞도록 정점에 정수 가중치를 부여하는 방법이 존재하지 않는다면:
첫째 줄에
No를 출력한다. 출력은 대소문자를 구분하지 않는다.
부분문제
| 번호 | 점수 | 조건 |
|---|---|---|
| #1 | 6점 | |
| #2 | 10점 | |
| #3 | 11점 | |
| #4 | 12점 | |
| #5 | 13점 | |
| #6 | 29점 | |
| #7 | 19점 | 추가 제약 조건 없음. |
예제 #1
3 3
1 2 5
2 3 4
3 1 3
Yes
2 3 1
예제 #2
5 4
1 3 5
2 3 -4
4 2 -12
5 3 3
Yes
2 -7 3 -5 0