/*
* HDU-1704 rank
* mike-w
* 2011-10-2
* ----------------
* 传递闭包,floyd
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 502
int x[MAXN][MAXN];
int N,M;
int main(void)
{
int ncase;
int i,j,k,a,b,cnt;
#ifndef ONLINE_JUDGE
freopen("1704.in","r",stdin);
#endif
scanf("%d",&ncase);
while(ncase-->0)
{
scanf("%d%d",&N,&M);
memset(x,0,sizeof(x));
for(i=0;i<M;i++)
{
scanf("%d%d",&a,&b);
x[a][b]=1;
}
for(k=1;k<=N;k++)
for(i=1;i<=N;i++)
if(x[i][k]) /* <= 这里要判断,否则TLE */
for(j=1;j<=N;j++)
x[i][j]|=x[i][k]&x[k][j];
cnt=0;
for(i=1;i<=N;i++)
for(j=i+1;j<=N;j++)
if(!x[i][j] && !x[j][i])
cnt++;
printf("%d\n",cnt);
}
return 0;
}
HDU-1074 传递闭包
最新推荐文章于 2021-07-25 18:40:42 发布