1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAXN 505 #define INF 0x3f3f3f3f using namespace std; int mp[MAXN][MAXN]; int n, m;
void init() { for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ mp[i][j] = (i == j); } } }
void floyd() { for(int k = 1; k <= n; k++){ for(int i = 1; i <= n; i++){ if(mp[i][k]) for(int j = 1; j <= n; j++){ if(mp[k][j]) mp[i][j] = 1; } } } }
int main() { int T; scanf("%d", &T); while(T--){ int ans = 0; scanf("%d%d", &n, &m); init(); while(m--){ int a, b; scanf("%d%d", &a, &b); mp[a][b] = 1; } floyd(); for(int i = 1; i <= n; i++){ for(int j = i + 1; j <= n; j++){ if(!(mp[i][j] || mp[j][i])) ans++; } } printf("%d\n", ans); } return 0; }
|