아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

무리오 카트

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

요약
숲의 각 트리를 X 길이의 간선으로 이어 붙이고 트리마다 내부 경로를 하나씩 골라 만든 단순 사이클 중 길이가 Y 이상인 것들의 길이 합을 구한다.
난이도

어려움10점 중 9점

유형
트리, 동적 계획법, 조합론, DFS
정답자
아직 제출이 없습니다

문제

Bessie와 Farmer John은 염소 카트 경주를 즐긴다. 다른 이들이 즐기는 카트 경주와 아주 비슷하지만, 카트를 염소가 끌고 트랙은 근처 농지로 만든다는 점이 다르다. 농지는 NN개의 초원과 MM개의 도로로 이루어지며, 각 도로는 두 초원을 연결한다.

Bessie는 근처 농장들로 코스를 만들려고 한다. 농장이란 두 개 이상의 초원으로 이루어진 집합으로, 그 안의 모든 초원이 유일한 도로 순서를 따라 서로에게 도달할 수 있는 것이다.

근처 농지에는 여러 농장이 있을 수 있다. 농장이 KK개라고 하자. Bessie는 KK개의 농장을 길이 XX인 도로 KK개로 연결해 염소 카트 루프를 만들려고 한다. 각 농장은 정확히 한 번 방문해야 하고, 각 농장 안에서는 적어도 하나의 도로를 지나야 한다.

경주자에게 흥미로운 코스를 만들기 위해 트랙의 총 길이는 적어도 YY여야 한다. Bessie는 그러한 흥미로운 트랙 모두에 대해 트랙 길이의 합을 알고 싶어 한다. 어떤 트랙에서 두 초원이 인접하고(농장 사이에 도로를 추가한 뒤) 다른 트랙에서는 인접하지 않으면 두 트랙은 서로 다르다. 염소 카트가 도로를 따라 이동하는 방향은 고려하지 않고 선택한 도로만 중요하다는 점에 유의하라.

입력

첫째 줄에 NN, MM, XX, YY가 주어진다. 여기서 1≤N≤15001 \leq N \leq 1500, 1≤M≤N−11 \leq M \leq N-1, 0≤X,Y≤25000 \leq X, Y \leq 2500이다.

다음 MM개의 줄이 도로를 나타낸다. 각 줄은 AiA_i BiB_i DiD_i 형태이며, 초원 AiA_i와 BiB_i가 길이 DiD_i인 도로로 연결됨을 뜻한다(1≤Ai,Bi≤N1 \leq A_i, B_i \leq N, 0≤Di≤25000 \leq D_i \leq 2500). 모든 초원에는 적어도 하나의 도로가 붙어 있고, 도로의 사이클은 없다.

적어도 70%의 테스트 케이스에서는 N≤1000N \leq 1000이고 Y≤1000Y \leq 1000임이 추가로 보장된다.

출력

흥미로운 트랙 모두에 대해 트랙 길이의 합을 나타내는 정수 하나를 출력한다. 합이 매우 클 수 있으므로 길이의 합을 109+710^9+7로 나눈 나머지를 출력한다.

힌트

이 예제에는 6개의 가능한 트랙이 있다.

  • 1 --> 2 --> 4 --> 5 --> 1 (길이 11)
  • 1 --> 2 --> 5 --> 4 --> 1 (길이 11)
  • 2 --> 3 --> 4 --> 5 --> 2 (길이 12)
  • 2 --> 3 --> 5 --> 4 --> 2 (길이 12)
  • 1 --> 2 --> 3 --> 4 --> 5 --> 1 (길이 15)
  • 1 --> 2 --> 3 --> 5 --> 4 --> 1 (길이 15)

답은 12+12+15+15=5412+12+15+15=54이며, 길이가 적어도 12인 트랙만 더한다.

예제1

  1. 예제 1

    입력
    5 3 1 12
    1 2 3
    2 3 4
    4 5 6
    
    예상 출력
    54