https://www.acmicpc.net/problem/1325
저는 bfs를 사용했습니다.
A가 B을 신뢰할 때 B -> A 방향 그래프를 만들고
모든 노드에 bfs을 돌려서 가장 많이 연결된 노드를 순차적으로 출력했습니다.
아래 코드는 시간초과가 납니다....
어디서 접근해야할지 모르겠습니다.
https://www.acmicpc.net/problem/1325
저는 bfs를 사용했습니다.
A가 B을 신뢰할 때 B -> A 방향 그래프를 만들고
모든 노드에 bfs을 돌려서 가장 많이 연결된 노드를 순차적으로 출력했습니다.
아래 코드는 시간초과가 납니다....
어디서 접근해야할지 모르겠습니다.
ID | 구분 | 제목 | 글쓴이 | 추천 | 조회 | 날짜 |
---|---|---|---|---|---|---|
118 | 전체공지 | 업데이트 내역 / 버튜버 방송 일정 | 8[RULIWEB] | 2023.08.08 | ||
10252 | 공지 | 유용한 사이트들 (3) | _ Bolic | 1 | 467 | 2024.02.14 |
10250 | 공지 | 코딩 테스트 게시판 공지입니다. (3) | _ Bolic | 6 | 461 | 2024.02.14 |
10404 | 잡담 | _ Bolic | 3 | 176 | 2024.03.05 | |
10401 | 잡담 | _ Bolic | 166 | 2024.03.05 | ||
10331 | 질문 | 차룬 | 1 | 378 | 2024.02.23 | |
10311 | 후기 | _ Bolic | 1 | 240 | 2024.02.20 | |
10310 | 후기 | _ Bolic | 1 | 154 | 2024.02.20 | |
10277 | 후기 | _ Bolic | 3 | 203 | 2024.02.16 | |
10268 | 잡담 | _ Bolic | 5 | 502 | 2024.02.15 | |
10254 | 친구모집 | _ Bolic | 3 | 315 | 2024.02.14 | |
10252 | 공지 | _ Bolic | 1 | 467 | 2024.02.14 | |
10251 | 잡담 | 차룬 | 1 | 250 | 2024.02.14 | |
10250 | 공지 | _ Bolic | 6 | 461 | 2024.02.14 |
(IP보기클릭)118.235.***.***
(IP보기클릭)118.235.***.***
script 태그가 안 되네요.. | 24.02.23 21:39 | | |
(IP보기클릭)119.202.***.***
(IP보기클릭)118.235.***.***
본문 수정했습니다! | 24.02.24 07:02 | | |
(IP보기클릭)119.202.***.***
(IP보기클릭)119.202.***.***
예를 들어서 1->2->3->4->3 이라는 그래프를 생각하고, 정점 2에서 탐색을 시작한다고 봅시다. visited[2]==0이기 때문에, visited[2]==-1로 체크를 해주고, visited[3]을 탐색해줍니다. visited[3]==0이기 때문에, visited[3]==-1로 체크를 해주고, visited[4]을 탐색해줍니다. visited[4]==0이기 때문에, visited[4]==-1로 체크를 해주고, visited[3]을 탐색해야 하는데, 이것은 이미 -1이라는 값이 존재하죠. -1을 만나는 순간 "이미 탐색중인 정점을 만나게 되었으므로" 더이상 탐색을 하지 않고 visited의 최종값을 갱신해주면 됩니다. 이 탐색중인 정점 이름을 p라고 합시다(여기서는 p=정점 3이 되겠죠) p를 처음 방문할 시점은 두번째이고(2다음 3을 보죠), 두번째로 방문할 시점은 4이기 때문에(2,3,4다음 3을 보죠) visited[4]=4-2=2로 설정한 후 탐색을 종료합니다. 이제 DFS를 했으니 정점을 반대로 보겠죠? 4번 정점 탐색을 완료했으니 이제 3번 정점으로 다시 돌아가게 됩니다. 만약 visited[p]값이 양수로 확정된 상태라면, visited[현재]=visited[다음]+1로, 아니면 visited[현재]=vistied[다음]으로 설정해줍니다. 현재 정점 3을 보고 있는데, 아직 visited[p](=visited[3])의 값이 -1인 상태이므로, visited[3]=visited[4]=2로 설정하고, 탐색을 종료합니다. 그러면 다시 정점 2로 되돌아갑니다. visited[3]의 값이 양수로 정의되어 있는 상태이므로, visited[2]=visited[3]+1=3으로 설정해둡니다. 이제 더이상 탐색을 종료할 노드가 없으므로 끝납니다. | 24.02.24 12:46 | | |
(IP보기클릭)119.202.***.***
이제 visited 배열을 보면 [0,3,2,2]로 되어있을것입니다. visited[v]==0인 v가 있다면, 아직 탐색이 안되었다는 뜻이므로 그러한 정점을 다시 찾아서 탐색을 반복해줍니다. 정점 1에서 부터 다시 시작한다고 봅시다. next=2라서 2번째 정점을 봐야 하는데, 이번에는 visited[next]==-1이 아닌, visited[next]==c라는 어떠한 양수값이 존재하는 상태를 마주하게 됩니다. 이 경우는 visited[p]값이 이미 양수로 확정된 상태로 간주하고, 갱신하면 됩니다. 즉, visited[1] = visited[2]+1 = 4로 설정하고 바로 탐색을 종료하면 됩니다. 그러면 이제 visited 배열은 [4,3,2,2]가 되겠죠? 더이상 0인 node가 없으므로 여기서 종료하면 됩니다. 이렇게 탐색할때마다 visited 배열을 초기화 하지 않아야 빠르게 답을 구할 수 있습니다. visited 배열을 초기화 하지 않으면 풀이가 조금 복잡하죠, 하지만 어쩔수 없습니다 ;ㅅ; | 24.02.24 12:49 | | |
(IP보기클릭)61.82.***.***
상세한 설명 감사합니다. 빨리 해결해서 자랑?하고 싶지만 쉽게 해결되지 않네요... 보니까 데이터셋 변경 후 자바는 시간이 빡빡해서 기존에 정답코드들도 틀림처리 되었더군요ㅜㅜ 조금 더 머리 굴려보겠습니다. | 24.02.28 23:18 | | |
(IP보기클릭)125.188.***.***