O(n3) floyd 算法加剪枝不吸氧跑得飞快,是不是数据太弱了。
#include<bits/stdc++.h>
#define MAXN 1010
using namespace std;
int n, m, ans;
bool vis[MAXN][MAXN];
int main(){
scanf("%d%d",&n,&m);
for(int i = 1; i <= m; i++){
int u, v; scanf("%d%d",&u,&v);
vis[u][v] = true;
}
for(int i = 1; i <= n; i++) vis[i][i] = true;
for(int k = 1; k <= n; k++){
for(int i = 1; i <= n; i++){
if(!vis[i][k]) continue;
for(int j = 1; j <= n; j++){
if(vis[i][j] || !vis[k][j]) continue;
vis[i][j] = true;
}
}
}
for(int i = 1; i <= n; i++) vis[i][i] = false;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(vis[i][j]) ans++;
}
}
ans = n * (n - 1) / 2 - ans;
printf("%d\n",ans);
return 0;
}