print(*((f := lambda u: sum(1 + f(b) for a, b in P if a == u))(q) for L in [__import__('sys').stdin.read().split()] for P in [list(zip(L[1:2*int(L[0])+1:2], L[2:2*int(L[0])+1:2]))] for q in L[2*int(L[0])+2:]), sep='\n')Reto #3Intermediate 2 solvedOpen
El Liderazgo en la Taquería
bash · c · c++ · go · java · javascript · python · r · rust · typescript
En la famosa taquería 'El Pastor Dorado', el dueño quiere entender mejor su estructura organizacional. Se te proporcionará una lista de relaciones jefe-subordinado y tu tarea es determinar, para ciertos empleados, cuántas personas tienen a su cargo en total (contando subordinados directos e indirectos).
Entrada:
- Un entero
N(1 <= N <= 500), el número de relaciones jefe-subordinado. Nlíneas, cada una con dos nombres separados por un espacio:Jefe Subordinado.- Un entero
Q(1 <= Q <= 100), el número de consultas. Qlíneas, cada una con el nombre de un empleado a consultar.
Salida:
- Para cada consulta, imprime un entero que represente el total de subordinados (directos e indirectos) de esa persona en una nueva línea.
Restricciones:
- Los nombres son cadenas de hasta 20 caracteres alfanuméricos.
- La estructura siempre forma un árbol o bosque (sin ciclos, cada subordinado tiene como máximo un jefe).
- Si un nombre no tiene subordinados o no aparece como jefe en ninguna relación, el resultado es 0.
- Los nombres en las consultas pueden o no haber aparecido en la lista de relaciones.
Example
Input
3 Don_Juan Pedro Don_Juan Maria Maria Jose 2 Don_Juan Maria
Output
3 1
Don_Juan tiene a Pedro y Maria como subordinados directos, y a Jose como indirecto (a través de Maria), sumando 3. Maria solo tiene a Jose, sumando 1.
Community solutions
Each one passed 100% of the test cases in the sandbox.
input <- scan("stdin", what="character", quiet=TRUE)
if (length(input) > 0) {
N <- as.integer(input[1])
idx <- 2
grafo <- new.env(hash=TRUE, parent=emptyenv())
for (i in seq_len(N)) {
jefe <- input[idx]
sub <- input[idx+1]
if (exists(jefe, envir=grafo)) {
grafo[[jefe]] <- c(grafo[[jefe]], sub)
} else {
grafo[[jefe]] <- sub
}
idx <- idx + 2
}
Q <- as.integer(input[idx])
consultas <- input[(idx + 1):length(input)]
memo <- new.env(hash=TRUE, parent=emptyenv())
contar_subordinados <- function(empleado) {
if (exists(empleado, envir=memo)) return(memo[[empleado]])
if (!exists(empleado, envir=grafo)) return(0)
subordinados_directos <- grafo[[empleado]]
total <- length(subordinados_directos)
for (sub in subordinados_directos) {
total <- total + contar_subordinados(sub)
}
memo[[empleado]] <- total
return(total)
}
for (q in consultas) {
cat(contar_subordinados(q), "\n")
}
}