인공 신경망

아직 제출이 없습니다시간 제한3초메모리 제한1024 MB

문제

2020년, 선린인터넷고등학교는 서울시 교육청에 의해 인공지능 분야 고등학교로 선정되었다.

정휘는 후배들이 지난 2년 동안 인공지능 교육을 잘 받았는지 확인하기 위해 신경망과 관련된 문제를 출제하기로 했다.

인공 신경망은 여러 개의 인공 신경으로 구성된 망 형태의 구조이다. ii번째 인공 신경은 가중치 W_i,1,W_i,2,,W_i,C_iW\_{i,1}, W\_{i,2}, \cdots, W\_{i,C\_i}와 편향값 B_iB\_i를 갖고 있다. C_iC\_i개의 입력 데이터 X_i,1,X_i,2,,X_i,C_iX\_{i,1}, X\_{i,2}, \cdots, X\_{i,C\_i}를 받으면 Y_i=X_i,1W_i,1+X_i,2W_i,2++X_i,C_iW_i,C_i+B_iY\_i = X\_{i,1}W\_{i,1} + X\_{i,2}W\_{i,2} + \cdots + X\_{i,C\_i}W\_{i,C\_i} + B\_i를 계산해서 출력한다. 즉, Y_i=_k=1C_iX_i,kW_i,k+B_iY\_i = \displaystyle \sum\_{k=1}^{C\_i} X\_{i,k}W\_{i,k} + B\_i를 출력한다. 아래 그림은 인공 신경의 구성을 그림으로 나타낸 것이다.

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

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

입력층은 NN개의 입력 A_1,A_2,,A_NA\_1, A\_2, \cdots, A\_N으로 구성되어 있고, 은닉층은 MM개의 인공 신경으로 구성되어 있다. 은닉층의 ii번째 인공 신경은 A_P_i,1,A_P_i,2,A_P_i,C_iA\_{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 = \lbrace \lbrace 1,2 \rbrace, \lbrace 3,4\rbrace, \lbrace 5,6 \rbrace, \lbrace 10,20,30\rbrace\rbrace, 편향값이 B={7,8,9,100}B = \lbrace 7, 8, 9, 100\rbrace인 인공 신경망에서 은닉층의 인공 신경들이 입력 층의 P={{1,2},{2,3},{4,5}}P = \lbrace\lbrace 1, 2\rbrace, \lbrace2, 3\rbrace, \lbrace4, 5\rbrace\rbrace 번째 값을 입력으로 받는다고 하자. 입력으로 A={2,7,6,8,4}A = \lbrace 2,7,6,8,4 \rbrace이 주어지면 아래 그림처럼 나타낼 수 있다.

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

입력

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

둘째 줄부터 MM번째 줄에 걸쳐 은닉층의 인공 신경의 정보가 한 줄에 하나씩 순서대로 주어진다. 인공 신경의 입력 개수 C_iC\_i, 입력 데이터 P_i,1,P_i,2,,P_i,C_iP\_{i,1}, P\_{i,2}, \cdots, P\_{i,C\_i}, 가중치 W_i,1,W_i,2,,W_i,C_iW\_{i,1}, W\_{i,2}, \cdots, W\_{i,C\_i}, 편향값 B_iB\_i가 차례로 공백으로 구분되어 주어진다. (1C_iN1 \leq C\_i \leq N, 1P_i,jN1 \leq P\_{i,j} \leq N, 각 ii마다 P_i,jP\_{i,j}는 서로 다름)

이어서 출력층의 인공 신경 정보가 한 줄에 걸쳐 주어진다. 가중치 W_M+1,1,W_M+1,2,,W_M+1,MW\_{M+1,1}, W\_{M+1,2}, \cdots, W\_{M+1,M}, 편향값 B_M+1B\_{M+1}이 차례로 공백으로 구분되어 주어진다. (1W_i,j,B_i1001 \leq W\_{i,j},B\_i \leq 100)

다음 QQ개의 줄에 걸쳐 여러분이 출력값을 구해야 하는 입력 데이터가 한 줄에 하나씩 주어진다. 각 줄은 NN개의 정수 A_1,A_2,,A_NA\_1, A\_2, \cdots, A\_N으로 구성되어 있다. (1A_i1001 \leq A\_i \leq 100)

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

출력

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

힌트

  • Python 사용자는 PyPy로 제출하는 것을 권장한다.
  • 정답이 32비트 정수 범위를 넘을 수 있다.