안녕하세요. 오늘은 부울행렬의 부울곱을 구할 거에요.

문제

https://www.acmicpc.net/problem/14492

아이디어

모든 (i,j)에 대해서 어떤 k가 A[i][k]==B[k][j]==1을 만족하면 cnt++해주면 됩니다.

소스코드

#include <iostream>
#define ll long long
using namespace std;


int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll N, i, j, A[333][333] = { 0 }, B[333][333] = { 0 };

    cin >> N;
    for (i = 1; i <= N; i++)
        for (j = 1; j <= N; j++)
            cin >> A[i][j];
    for (i = 1; i <= N; i++)
        for (j = 1; j <= N; j++)
            cin >> B[i][j];

    ll cnt = 0;
    for (i = 1; i <= N; i++)
    {
        for (j = 1; j <= N; j++)
        {
            for (ll k = 1; k <= N; k++)
                if (A[i][k] && B[k][j])
                {
                    cnt++;
                    break;
                }
            
        }
    }

    cout << cnt << "\n";
}


감사합니다.

0개의 댓글