刚学传递闭包,在杭电搜到了一个很裸的数据结构题练习,出现几个ass错误,搞到了半夜,提交时还忘了注释freopen(),不说了,睡觉zzzzzzzz
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=500+5;
bool a[maxn][maxn];
int m,n;
void t_closure(){//传递闭包
for(int i=1;i<=n;i++)//列
for(int j=1;j<=n;j++)//行
if(a[j][i])
for(int k=1;k<=n;k++)
a[j][k]=(a[j][k]||a[i][k]);//合取
}
int main(){
//freopen("data.in","r",stdin);
int T;
cin>>T;
while(T--){
memset(a,0,sizeof(a));
int win,loser;
cin>>n>>m;
for(int i=1;i<=m;i++){
scanf("%d%d",&win,&loser);
a[win][loser]=true;
}
t_closure();
int cnt=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]==0&&a[j][i]==0&&i!=j) ++cnt;
cout<<cnt/2<<endl;
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-1122917.html