발 디딜 곳을 조심하세요

면접 대비

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

요약
동물원 그래프에 두 명소 사이의 도달 관계를 새로 만들지 않으면서 추가할 수 있는 단방향 산책로의 최대 개수를 구합니다.
난이도

보통10점 중 6점

유형
그래프, BFS, 해시맵, 행렬
정답자
아직 제출이 없습니다

문제

당신은 동물원 직원으로, 최근 배설물 처리 담당에서 동물원 전체 산책로 배치를 관리하는 자리로 승진했다. 현재 모든 산책로는 일방통행이며, 동물원은 여러 구역으로 나뉘어 있다. 각 구역은 여러 볼거리(코끼리 우리, 도마뱀관 등)로 이루어져 있고, 같은 구역 안에서는 하나 이상의 산책로를 이용해 어떤 볼거리에서든 같은 구역의 다른 볼거리로 갈 수 있다. 한 구역에서 다른 구역으로 산책로를 따라 이동하면, 떠나온 구역으로는 다시 돌아올 수 없다. 그러나 동물원을 한 번 방문하는 동안 모든 구역을 걸어서 둘러볼 수는 있다. 원래 설계자들은 이러한 배치가 방문객의 흐름을 조절하는 데 매우 중요하다고 생각했다.

이사회에서 문제를 들고 당신을 찾아왔다. 이들은 구역을 나누는 방식에는 원래 설계자들과 같은 의견이지만, 일방통행 산책로를 더 추가하면 동물원이 방문객에게 좀 더 편리해질 것이라고 본다. 이들은 이전에 두 볼거리 사이에 경로가 없었던 경우에는 경로가 생기지 않도록 하면서 추가할 수 있는 산책로의 최대 개수를 구해 달라고 한다.

예를 들어, 7개의 볼거리 1("낙타 성")부터 7("하마 경마장")까지 있는 그림 J.1의 작은 동물원을 보자. 현재 볼거리 1, 2, 3, 4는 한 구역을 이루고 5, 6, 7은 다른 구역을 이룬다. 1, 2, 3, 4에서 5, 6, 7 중 어느 곳으로든 산책로를 추가할 수 있지만, (예를 들어) 7에서 1로 가는 산책로를 추가하면 방문객이 7에서 1로 갈 수 있게 되는데, 이는 이전에는 불가능했다. 한 구역 안에서 아직 없는 모든 볼거리 사이에도 산책로를 추가할 수 있다(예: 1에서 3, 2에서 4). 이 동물원에서 추가할 수 있는 산책로의 총 개수는 21이다.

그림 J.1: 예시 동물원. 이 예시는 Sample Input 1에 해당한다.

입력

입력의 첫 줄에는 볼거리의 개수 nn (1≤n≤2 5001 \le n \le 2\,500)이 주어지며, 볼거리는 1부터 nn까지 번호가 붙는다. 그다음 nn개의 줄이 각각 nn개의 정수를 포함한다. ii번째 줄의 jj번째 정수가 1이면 볼거리 ii에서 볼거리 jj로 가는 일방통행 산책로가 있음을 나타내고, 그렇지 않으면 0이며 이는 그러한 산책로가 없음을 나타낸다. 볼거리에서 자기 자신으로 가는 산책로는 없다.

출력

동물원에 추가할 수 있는 새로운 일방통행 산책로의 최대 개수를 출력한다.

예제3

  1. 예제 1

    입력
    7
    0 1 0 0 0 0 0
    0 0 1 0 1 0 0
    1 0 0 1 0 0 0
    1 0 0 0 0 0 0
    0 0 0 0 0 1 0
    0 0 0 0 0 0 1
    0 0 0 0 1 0 0
    
    예상 출력
    21
    
  2. 예제 2

    입력
    5
    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0
    0 0 0 0 1
    0 0 0 0 0
    
    예상 출력
    6
    
  3. 예제 3

    입력
    2
    0 1
    1 0
    
    예상 출력
    0