만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

인공 신경망

시간 제한3초메모리 제한1024 MB

요약
선형 뉴런으로 이루어진 신경망의 구조와 Q개의 입력이 주어졌을 때, 각 입력에 대한 출력값을 구합니다.
난이도

보통10점 중 5점

유형
수학, 배열
정답자
아직 제출이 없습니다

문제

2020년 서울시 교육청은 선린인터넷고등학교를 인공지능 분야 고등학교로 선정했다.

정휘는 후배들이 지난 2년 동안 인공지능 교육을 제대로 받았는지 확인하려고 신경망 문제를 출제하기로 했다.

인공 신경망은 여러 개의 인공 신경으로 구성된 망 형태의 구조이다. ii번째 인공 신경은 가중치 Wi,1,Wi,2,⋯ ,Wi,CiW_{i,1}, W_{i,2}, \cdots, W_{i,C_i}와 편향값 BiB_i를 갖는다. CiC_i개의 입력 데이터 Xi,1,Xi,2,⋯ ,Xi,CiX_{i,1}, X_{i,2}, \cdots, X_{i,C_i}를 받으면 다음 값을 계산해 출력한다.

Yi=∑k=1CiXi,kWi,k+BiY_i = \sum_{k=1}^{C_i} X_{i,k}W_{i,k} + B_i

아래 그림은 인공 신경의 구성을 나타낸 것이다.

예를 들어 가중치가 {3,1}\{3, 1\}, 편향값이 22인 인공 신경을 생각해 보자. 입력이 {1,2}\{1, 2\}이면 출력값은 1×3+2×1+2=71\times3+2\times1+2=7이다.

정휘가 준비한 인공 신경망은 입력층, 은닉층, 출력층으로 구성되어 있다.

입력층은 NN개의 입력 A1,A2,⋯ ,ANA_1, A_2, \cdots, A_N으로 구성되어 있고, 은닉층은 MM개의 인공 신경으로 구성되어 있다. 은닉층의 ii번째 인공 신경은 APi,1,APi,2,⋯ ,APi,CiA_{P_{i,1}}, A_{P_{i,2}}, \cdots, A_{P_{i,C_i}}를 입력으로 받아 출력값을 계산한다. 출력층은 인공 신경 1개로 구성되며, 은닉층의 1,2,⋯ ,M1, 2, \cdots, M번째 인공 신경의 출력값을 순서대로 입력으로 받아 출력값을 계산한다. 편의상 출력층의 인공 신경을 M+1M+1번째 인공 신경이라고 하자.

예를 들어 인공 신경들의 가중치가 W={{1,2},{3,4},{5,6},{10,20,30}}W = \{\{1,2\}, \{3,4\}, \{5,6\}, \{10,20,30\}\}, 편향값이 B={7,8,9,100}B = \{7, 8, 9, 100\}인 인공 신경망에서 은닉층의 인공 신경들이 입력층의 P={{1,2},{2,3},{4,5}}P = \{\{1, 2\}, \{2, 3\}, \{4, 5\}\}번째 값을 입력으로 받는다고 하자. 입력으로 A={2,7,6,8,4}A = \{2, 7, 6, 8, 4\}이 주어지면 아래 그림처럼 나타낼 수 있다.

인공 신경망의 구성과 입력 데이터가 주어지면 신경망의 출력값을 구하는 프로그램을 작성해 보자.

입력

첫째 줄에 입력층의 입력 크기 NN, 은닉층의 인공 신경 개수 MM, 출력값을 계산해야 하는 횟수 QQ가 공백으로 구분되어 주어진다. (1≤N,M,Q≤2 000)(1 \leq N,M,Q \leq 2\,000)

둘째 줄부터 MM번째 줄까지 은닉층의 인공 신경 정보가 한 줄에 하나씩 순서대로 주어진다. 인공 신경의 입력 개수 CiC_i, 입력 데이터의 위치 Pi,1,Pi,2,⋯ ,Pi,CiP_{i,1}, P_{i,2}, \cdots, P_{i,C_i}, 가중치 Wi,1,Wi,2,⋯ ,Wi,CiW_{i,1}, W_{i,2}, \cdots, W_{i,C_i}, 편향값 BiB_i가 차례로 공백으로 구분되어 주어진다. (1≤Ci≤N1 \leq C_i \leq N, 1≤Pi,j≤N1 \leq P_{i,j} \leq N, 각 ii마다 Pi,jP_{i,j}는 서로 다름)

이어서 출력층의 인공 신경 정보가 한 줄에 주어진다. 가중치 WM+1,1,WM+1,2,⋯ ,WM+1,MW_{M+1,1}, W_{M+1,2}, \cdots, W_{M+1,M}과 편향값 BM+1B_{M+1}이 차례로 공백으로 구분되어 주어진다. (1≤Wi,j,Bi≤1001 \leq W_{i,j},B_i \leq 100)

다음 QQ개의 줄에는 출력값을 구해야 하는 입력 데이터가 한 줄에 하나씩 주어진다. 각 줄은 NN개의 정수 A1,A2,⋯ ,ANA_1, A_2, \cdots, A_N으로 구성된다. (1≤Ai≤1001 \leq A_i \leq 100)

입력으로 주어지는 수는 모두 정수이다.

출력

QQ개의 줄에 정답을 출력한다.

힌트

Python 사용자는 PyPy로 제출하는 것을 권장한다.

정답이 32비트 정수 범위를 넘을 수 있다.

예제1

  1. 예제 1

    입력
    5 3 2
    2 1 2 1 2 7
    2 2 3 3 4 8
    2 4 5 5 6 9
    10 20 30 100
    2 7 6 8 4
    1 2 3 4 5
    
    예상 출력
    3580
    2510