Tree

https://www.acmicpc.net/problem/19535코드from math import combn = int(input())children = [0]*(n+1)graph = []for _ in range(n-1): u, v = map(int, input().split()) children[u] += 1 children[v] += 1 graph.append((u, v))d_num, g_num = 0, 0# ㄷfor u, v in graph: d_num += (children[u]-1)*(children[v]-1)# ㅈfor i in range(1, n+1): if children[i] >= 3: g_num += comb(children[i], 3)i..
·문제풀이/DP
https://www.acmicpc.net/problem/20364코드from collections import dequeimport sysinput = sys.stdin.readlinen, q = map(int, input().split())dp = [-1]*(n+1) # dp[i]는 1번에서 i번까지 가는 길에 가장 처음 마주치는 점유된 땅 번호for i in range(q): want = int(input()) if dp[want] == -1: # 가는 길에 이미 점유된 땅이 없음 # 이 땅 아래로는 다 이 땅을 지나야만 한다고 표시 q = deque([want]) while q: now = q.popleft() ..
11437번: LCA 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정 www.acmicpc.net 코드 from collections import deque import sys input = sys.stdin.readline n = int(input()) graph = [[] for _ in range(n+1)] # 노드 간 연결 for _ in range(n-1): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) # 각 노드 레벨 구하기(BFS) level = [-1]*(n+..
2233번: 사과나무 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 2,000)이 주어진다. 둘째 줄에는 벌레가 만드는 2×N자리의 이진수가 주어진다. 셋째 줄에는 썩은 사과의 위치를 나타내는 두 정수 X, Y가 주어진다. 이는 2×N자리 www.acmicpc.net 코드 import sys sys.setrecursionlimit(10**6) n = int(input()) binary = '9' + input() x, y = map(int, input().split()) parent = [[] for _ in range(n+1)] # 각 노드의 부모(가까운 노드부터) depth = [-1] * (n+1) # 각 노드의 깊이 removed = [] inout = [[] for _ in range(n+1)] de..
17073번: 나무 위의 빗물 첫째 줄에 트리의 노드의 수 N과 1번 노드에 고인 물의 양을 의미하는 정수 W가 주어진다. (2 ≤ N ≤ 500,000, 1 ≤ W ≤ 109) 다음 N-1줄에 걸쳐, 트리에 존재하는 간선의 정보가 U V의 형태로 주어진다 www.acmicpc.net 코드 import sys input = sys.stdin.readline sys.setrecursionlimit(10**6) n, w = map(int, input().split()) edges = [[] for _ in range(n+1)] for _ in range(n-1): u, v = map(int, input().split()) edges[u].append(v) edges[v].append(u) visited = ..
딜레이레이
'Tree' 태그의 글 목록