단순 경로 수열의 도치

정점 N개와 간선 N개인 연결 무향 그래프에서 K개 이상의 정점을 지나는 단순 경로의 역전 수 최솟값을 구하고, 그런 경로가 없으면 -1을 출력한다.

어려움8그래프동적 계획법DFS정렬아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

정점이 NN개인 연결 무방향 그래프가 주어진다. 정점에는 11번부터 NN번까지 번호가 붙어 있고, 간선의 개수는 정점의 개수와 같다. ii번 정점에는 값 ViV_i가 하나 적혀 있다.

같은 정점을 두 번 이상 지나지 않는 경로를 단순 경로라고 한다. 단순 경로가 지나는 정점의 값을 지나는 순서대로 적으면 수열이 하나 나온다. 이 수열을 그 단순 경로의 수열이라고 한다. 정점 하나로만 이루어진 경로도 단순 경로다.

수열 SS의 도치의 개수는 i<ji < j이면서 S[i]>S[j]S[i] > S[j]인 쌍 (i,j)(i, j)의 개수다. 예를 들어 S=(10,30,20,20)S = (10, 30, 20, 20)이면 도치는 (2,3)(2, 3)(2,4)(2, 4)로 두 개다.

그래프와 정수 KK가 주어진다. 정점을 KK개 이상 지나는 모든 단순 경로 중에서 수열의 도치 개수가 가장 작은 값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정점의 개수 NN과 정수 KK가 주어진다. (3N10003 \le N \le 1000, 1KN1 \le K \le N)

둘째 줄부터 NN개의 줄에 간선의 정보가 한 줄에 하나씩 주어진다. 각 줄에는 간선이 잇는 두 정점의 번호가 주어진다. 자기 자신으로 이어지는 간선은 없고, 같은 간선이 두 번 주어지지도 않는다.

마지막 줄에 V1V_1부터 VNV_N까지 NN개의 값이 순서대로 주어진다. (1Vi10001 \le V_i \le 1000)

출력

정점을 KK개 이상 지나는 모든 단순 경로 중에서 수열의 도치 개수가 가장 작은 값을 첫째 줄에 출력한다. 그런 단순 경로가 없으면 -1을 출력한다.