BOJ:ウイルス[2606]
10096 ワード
1.質問
新型ウイルスワームウイルスはネットワークを通じて伝播する.1台のコンピュータがワームウイルスに感染した場合、ネットワークに接続されているすべてのコンピュータがワームウイルスに感染します.
例えば、<図1>に示すように、7台のコンピュータがネットワークに接続されているとする.1番のコンピューターがワームウイルスに感染した場合、ワームウイルスは2番と5番のコンピューターを経て3番と6番のコンピューターに伝播し、2、3、5、6の4台のコンピューターがワームウイルスに感染する.しかし、4番と7番は1番とネットワーク接続がないため、影響を受けません.
ある日、1番のパソコンがワームウイルスに感染した.コンピュータの数とネットワーク上の情報が相互に接続されている場合は、コンピュータを介してワームウイルスに感染したコンピュータの数を出力するプログラムを作成します.
ソース:https://www.acmicpc.net/problem/2606
2.アイデア
3.コード
mineimport sys
input = sys.stdin.readline
def dfs(graph, v, visited):
#현재 노드를 방문 처리
visited[v] = True
#현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
computer = int(input())
connected_pair = int(input())
graph = [[] for _ in range(computer+1)]
for _ in range(connected_pair):
x,y=map(int, input().split())
graph[x].append(y)
graph[y].append(x)
for g in graph:
g.sort()
visited = [False] * (computer+1)
dfs(graph, 1, visited)
print(visited.count(True)-1)
clonefrom sys import stdin
read = stdin.readline
dic={}
for i in range(int(read())):
dic[i+1] = set()
for j in range(int(read())):
a, b = map(int,read().split())
dic[a].add(b)
dic[b].add(a)
def dfs(start, dic):
for i in dic[start]:
if i not in visited:
visited.append(i)
dfs(i, dic)
visited = []
dfs(1, dic)
print(len(visited)-1)
ソース:https://chancoding.tistory.com/60
4.比較結果
1. mine
2. clone
Reference
この問題について(BOJ:ウイルス[2606]), 我々は、より多くの情報をここで見つけました
https://velog.io/@onejh96__/BOJ-바이러스-2606
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import sys
input = sys.stdin.readline
def dfs(graph, v, visited):
#현재 노드를 방문 처리
visited[v] = True
#현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
computer = int(input())
connected_pair = int(input())
graph = [[] for _ in range(computer+1)]
for _ in range(connected_pair):
x,y=map(int, input().split())
graph[x].append(y)
graph[y].append(x)
for g in graph:
g.sort()
visited = [False] * (computer+1)
dfs(graph, 1, visited)
print(visited.count(True)-1)
from sys import stdin
read = stdin.readline
dic={}
for i in range(int(read())):
dic[i+1] = set()
for j in range(int(read())):
a, b = map(int,read().split())
dic[a].add(b)
dic[b].add(a)
def dfs(start, dic):
for i in dic[start]:
if i not in visited:
visited.append(i)
dfs(i, dic)
visited = []
dfs(1, dic)
print(len(visited)-1)
1. mine
2. clone
Reference
この問題について(BOJ:ウイルス[2606]), 我々は、より多くの情報をここで見つけました https://velog.io/@onejh96__/BOJ-바이러스-2606テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol