최소 스패닝 트리 다시 그리기 놀이
시간 제한2초메모리 제한1024 MB
연결된 가중치 그래프가 주어질 때, 가중치 x의 간선 묶음을 확률 1/x로 지운 뒤 다시 그릴 수 있는 MST 개수의 기댓값을 구합니다.
문제
하늘이는 최근 입대하였다. 하늘이의 선임은 하늘이가 사회에서 코딩하다 온 것을 알고, 하늘이에게 다음과 같이 “최소 스패닝 트리 다시 그리기 놀이”를 알려 주었다.
- 먼저 선임이 후임에게 무향 연결 그래프 를 준다. 이때 를 구성하는 간선의 가중치는 모두 이하의 양의 정수이다.
- 후임은 에서 그릴 수 있는 서로 다른 최소 스패닝 트리 중 같은 확률로 최소 스패닝 트리 를 하나 고른다.
- 선임은 부터 까지 차례대로 각각 독립적으로, 정수 를 의 확률로 후임에게 말한다. 즉, 은 반드시 말하므로, 최소 개 이상 개 이하의 수를 말한다.
- 후임은 선임이 를 말하면 에서 가중치가 인 간선을 모두 지운다. 에서 간선들이 지워진 상태를 이라고 하자.
- 후임은 에, 원래 그래프 에 있는 간선을 개 이상 추가하여 다시 의 최소 스패닝 트리를 만든다.
하늘이는 이 놀이를 듣고, 새로 그릴 수 있는 최소 스패닝 트리의 개수가 몇 개인지 궁금해졌다. 선임이 후임에게 주는 그래프 가 주어졌을 때, “최소 스패닝 트리 다시 그리기 놀이”를 통해 그릴 수 있는 최소 스패닝 트리 개수의 기댓값을 구해보자.
입력
첫 번째 줄에 그래프 의 정점 개수 와 간선 개수 가 공백으로 구분되어 주어진다. 두 번째 줄부터 개의 줄에 걸쳐 간선 정보가 주어진다. 정수 , , 가 공백으로 구분되어 주어지며, 이는 번 정점과 번 정점을 연결하는 가중치 의 간선이 존재한다는 뜻이다. 주어지는 그래프는 연결 그래프이며, 임의의 두 정점 사이의 간선은 최대 한 개 존재함이 보장된다.
출력
에 대해 “최소 스패닝 트리 다시 그리기 놀이”를 통해 그릴 수 있는 최소 스패닝 트리 개수의 기댓값을 로 나눈 나머지를 출력한다.
기약 분수 (, , )를 으로 나눈 나머지는, 을 만족하는 정수 , 즉 의 에 대한 모듈로 곱셈 역원을 써서 로 정의한다. 정수일 경우 이므로 을 뜻한다.
만약 정답의 분모가 의 배수인 경우 기댓값 대신 -1을 출력한다.