만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

간선 위의 최솟값

시간 제한4초메모리 제한512 MB

요약
정점이 최대 18개인 그래프에서 s개의 토큰을 정점에 나눠 놓아, 모든 간선의 양 끝 토큰 수 중 작은 값의 합을 최대화하는 배치를 구합니다.
난이도

어려움10점 중 8점

유형
완전 탐색, 비트 연산, 그래프
정답자
아직 제출이 없습니다

문제

nn개의 정점과 mm개의 간선으로 이루어진 무방향 그래프가 주어진다. 각 정점에는 여러 개의 토큰을 놓을 수 있다. 처음에는 모든 정점에 토큰이 없고, 가지고 있는 ss개의 토큰을 정점들에 나누어 놓을 수 있다.

간선의 용량은 양 끝점에 놓인 토큰 수 중 작은 값이다. 모든 간선의 용량 합을 최대로 만드는 것이 목표이다.

입력

첫 줄에 정수 nn, mm, ss가 주어진다. 각각 정점의 수, 간선의 수, 나눠 놓을 토큰의 수이다 (1≤n≤181 \le n \le 18, 0≤m≤100 0000 \le m \le 100\,000, 0≤s≤1000 \le s \le 100).

다음 mm개 줄에는 간선이 하나씩 주어진다. 각 줄에는 간선이 잇는 두 정점의 번호 uu, vv가 주어진다 (1≤u,v≤n1 \le u, v \le n).

그래프에는 자기 자신으로 가는 간선이 없다. 하지만 같은 두 정점을 잇는 간선이 여러 개 있을 수 있다.

출력

nn개의 수 a1,a2,…,ana_1, a_2, \ldots, a_n (0≤ai≤s0 \le a_i \le s)을 출력한다. aia_i는 정점 ii에 놓는 토큰의 수이다. 출력한 수들의 합은 ss와 같아야 한다. 모든 간선의 용량 합이 최대가 되어야 한다.

최적해가 여러 개라면 그중 아무거나 출력해도 된다.

힌트

첫 번째 입력 예시에서 용량의 합은 min⁡(2,2)+min⁡(2,2)+min⁡(2,2)+min⁡(2,0)=2+2+2+0=6\min(2, 2) + \min(2, 2) + \min(2, 2) + \min(2, 0) = 2 + 2 + 2 + 0 = 6이다.

두 번째 입력 예시에서 용량의 합은 min⁡(3,2)+min⁡(3,2)+min⁡(3,2)+min⁡(3,2)+min⁡(3,2)+min⁡(2,2)+min⁡(2,2)=2+2+2+2+2+2+2=14\min(3, 2) + \min(3, 2) + \min(3, 2) + \min(3, 2) + \min(3, 2) + \min(2, 2) + \min(2, 2) = 2 + 2 + 2 + 2 + 2 + 2 + 2 = 14이다.

예제2

  1. 예제 1

    입력
    4 4 6
    1 2
    2 3
    3 1
    1 4
    
    예상 출력
    2 2 2 0
    
  2. 예제 2

    입력
    3 7 7
    1 2
    1 2
    1 2
    1 3
    1 3
    2 3
    2 3
    
    예상 출력
    3 2 2