bard.cpp

Bài toán

Độ phức tạp

Code này của Nguyễn Tiến Trung Kiên

#include <stdio.h>

#define long long long

int n, T, m;

int b[12309];

long a[12309];

main(){

    int i, cnt=0;

    scanf("%d%d", &n, &T);

    while (T--){

        scanf("%d", &m);

        bool bard=false;

        for (i=1; i<=m; i++) scanf("%d", &b[i]);

        for (i=1; i<=m; i++) if (b[i]==1) bard=true;

        if (bard) {

            cnt++;

            for (i=1; i<=m; i++) a[b[i]] |= (1<<cnt);

        }

        else {

            long sum=0;

            for (i=1; i<=m; i++) sum |= a[b[i]];

            for (i=1; i<=m; i++) a[b[i]]=sum;

        }

    }

    for (i=1; i<=n; i++)

    if (a[i]==a[1]) printf("%d\n", i);

}

Nhận xét