题目链接:hdu 1704 Rank
题意:
有n个人,m场比赛,a与b打,每场都是awin,问不能确定其中两个人的win情况数。
题解:
floyd传递闭包,这里我用bitset优化了一下。
1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespace std; 4 bitset<501>a[501]; 5 6 int n,m,t; 7 8 int main(){ 9 scanf("%d",&t); 10 while(t--) 11 { 12 scanf("%d%d",&n,&m); 13 F(i,0,n)a[i].reset(); 14 F(i,1,m) 15 { 16 int x,y; 17 scanf("%d%d",&x,&y); 18 a[x][y]=1; 19 } 20 F(k,1,n)F(i,1,n)if(a[i][k])a[i]|=a[k]; 21 int ans=0; 22 F(i,1,n)F(j,i+1,n)if(!(a[i][j]||a[j][i]))ans++; 23 printf("%d ",ans); 24 } 25 return 0; 26 }