Processing math: 100%

백준10364 Group of Strangers

문제 링크

  • http://icpc.me/10364

시간복잡도

  • O(N+MM)

풀이

세 정점 (u,v,w)가 간선으로 연결되어 있는 경우의 수를 찾는 문제로 바꿔서 생각합시다. 간선 1개, 2개, 3개로 연결된 경우의 수를 각각 세서 더해주면 됩니다.

세 정점이 3개의 간선으로 연결된 경우의 수는 O(MM)에 구할 수 있습니다.
차수가 M 이상인 정점을 무거운 정점, 그렇지 않은 정점을 가벼운 정점으로 정의합시다. 무거운 정점 2개를 연결하는 간선을 무거운 간선, 그렇지 않은 간선을 가벼운 간선으로 정의합시다. 악수 정리를 잘 생각해보면, 무거운 정점은 최대 O(M) 존재하는 것을 알 수 있습니다. 당연히 무거운 간선도 O(M)개 존재합니다.
무거운 정점 3개와 무거운 간선 3개로 구성된 삼각형을 찾는 것은 Naive하게 구현하면 O((M)3)=O(MM)에 구할 수 있습니다.
최소 1개의 정점이 가벼운 정점인 경우를 봅시다. 가벼운 간선이 잇는 두 정점 중 차수가 더 작은 정점을 u, 큰 정점을 v라고 합시다. u의 차수는 M 이하입니다.
u와 인접한 w를 모두 보면서, u,v,w가 모두 연결되어있는지 확인해주면 모든 경우의 수를 고려할 수 있습니다. 이 경우에는 시간 복잡도가 O(M×M)이 됩니다.

세 정점이 2개의 간선으로 연결된 경우의 수는 O(N)에 구할 수 있습니다.
차수가 d인 정점 u가 있을 때, u를 포함하는 세 정점 중 u는 2개의 간선과 연결되는 경우의 수는 d(d1)/2입니다. (u와 인접한 서로 다른 두 정점 v,w 선택) vw가 인접할 수 있기 때문에 세 정점이 간선 3개로 연결되는 경우의 수를 구해서 빼면 세 정점이 간선 1개로 연결되는 경우의 수가 나오게 됩니다.

세 정점이 1개의 간선으로 연결된 경우의 수는 O(N)에 구할 수 있습니다.
차수가 d인 정점 u 있을 때, u를 포함하는 세 정점 중 u는 1개의 간선과 연결되는 경우의 수는 d×(Nd1)입니다. (u와 인접한 정점 v과 인접하지 않은 정점 w를 선택) vw가 인접할 수 있기 때문에 세 정점이 간선 2개로 연결되는 경우의 수를 구해서 빼면 세 정점이 간선 1개로 연결되는 경우의 수가 나오게 됩니다.