hdu 1704 Rank(floyd传递闭包)

题目链接: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\n",ans);
24     }
25     return 0;
26 }
View Code

 

posted @ 2017-03-03 18:13  bin_gege  阅读(608)  评论(0编辑  收藏  举报