poj 3660 Cow Contest (floyd傳遞閉包)
阿新 • • 發佈:2018-11-02
題意:有n頭牛比賽,m種比賽結果,最後問你一共有多少頭牛的排名被確定了,其中如果a戰勝b,b戰勝c,則也可以說a戰勝c,即可以傳遞勝負。求能確定排名的牛的數目。
程式碼如下。。。。floyd處理一下
#include<stdio.h> #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<string.h> #include<queue> #include<stack> #include<list> #include<map> #include<set> #include<bitset> #include<vector> using namespace std; typedef long long int ll; const int maxn =1500+10; const int maxm=10000; const int mod =1e9+7; const int INF=0x3f3f3f3f; //********************************** int u,v; int main() { bitset<110> map[110]; memset(map, 0, sizeof(map)); int n,m;scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d",&u,&v); map[u][v]=1; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(map[j][i]) map[j]|=map[i]; int ans = 0, j; for(int i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { if(i == j) continue; if(map[i][j] == 0 && map[j][i] == 0) { break; } } if(j > n) ans++; } printf("%d\n", ans); return 0; }