일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- MySQL
- 모각코
- 명품자바
- HUFS 모각코 캠프
- 자바
- 백준 18310번
- java_programming
- 백준 1987
- 백준 1253번
- ubuntu
- react
- SWEA 15612번
- SQL
- 머신러닝과 딥러닝
- 그래프
- 백준 1331번
- 백준 3085번
- 백준 17451번
- 다이나믹 프로그래밍
- 깃헙
- 다이나믹프로그래밍
- 백준 15787번
- javascript
- 그리디
- Python
- 백준
- 백준 16918번
- AWS
- 백준 2512번
- 알고리즘
Archives
- Today
- Total
차곡차곡
[BOJ/Python] 백준 1325번 - 효율적인 해킹 본문
백준 #1325 효율적인 해킹
1325번: 효율적인 해킹
첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에 신뢰하는 관계가 A B와 같은 형식으로 들어오며, "A가 B를 신뢰한
www.acmicpc.net
from collections import deque
import sys
input = sys.stdin.readline
def bfs(s):
visited = [False] * (n+1)
q = deque([s])
visited[s] = True
cnt = 1
while q:
w = q.popleft()
for v in graph[w]:
if visited[v]: continue
visited[v] = True
q.append(v)
cnt += 1
return cnt
n, m = map(int, input().split()) # n: 컴퓨터 개수, m: 신뢰 관계 개수
graph = [[] for _ in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
graph[b].append(a)
maxCnt = 0
maxCom = []
for i in range(1, n+1):
cnt = bfs(i)
if maxCnt < cnt:
maxCnt = cnt
maxCom = [i]
elif maxCnt == cnt:
maxCom.append(i)
print(*maxCom)
신뢰하는 관계를 방향 그래프로 나타내 그래프 탐색을 통해 풀었다. 각 노드에서 갈 수 있는 모든 노드의 개수가 곧 해당 컴퓨터를 해킹했을 때 해킹할 수 있는 컴퓨터의 개수가 된다.
python으로 제출했을 때 타임 아웃이 돼서 pypy로 제출했다. 시작하는 노드를 모든 번호로 하지 않고 신뢰하는 관계를 가진 컴퓨터만 하면 개선할 수 있을 것 같다.
5 4
3 1
3 2
4 3
5 3
이렇게 입력이 들어왔을 때 1, 2, 3 만 확인한다는 의미!
'CS > Algorithm' 카테고리의 다른 글
[SWEA/Java] SW Expert Academy 1952번 - 수영장 (0) | 2023.08.08 |
---|---|
[BOJ/Python, Java] 백준 24230번 - 트리 색칠하기 (0) | 2023.08.08 |
[SWEA/Java] SW Expert Academy 1218번 - 괄호 짝짓기 (0) | 2023.08.04 |
[BOJ/Python, Java] 백준 2164번 - 카드2 (0) | 2023.08.04 |
[BOJ/Java] 백준 3040번 - 백설 공주와 일곱 난쟁이 (0) | 2023.08.04 |
Comments