#include <cstdint>
#include <vector>
#include <bitset>
using namespace std;
// Транзитивное замыкание : c --> d
// a-->b && b-->c => a-->c
// Матрица смежности (есть ли ребро)
// c[i,j] = true/false
// Матрица достижимости (достижима ли)
// d[i,j] = true/false
#define forn(i, n) for (int i = 0; i < (int)(n); i++)
// #pragma GCC target("avx2")
const int n = 100;
// int d[n][n]; // d=c
bitset<n> d[n];
int main() {
// n^3 --> n^3 / 64
// i ---> j>i
// nm --> nm / 64
for (int i = n - 1; i >= 0; i--) {
d[i][i] = 1;
for (int x : graph[i]) // m : i --> x
d[i] |= d[x]; // n/64
}
forn(k, n)
forn(i, n)
if (d[i][k])
d[i] |= d[k];
// forn(j, n)
// d[i][j] |= d[k][j];
// forn(j, n)
// if (d[k][j]) // d[i][k] &&
// d[i][j] = 1;
}
|