题目链接:https://vjudge.net/problem/POJ-3660
思路:为了确定排名,那么确定排名的那头牛一定是和所有的其他牛有比较,就是说他和其他n-1头
牛有联系,就是说,u能到v,或者v能到u,flody可以实现这个,
之后我们只需统计 i-th牛能和其他几头牛有联系,如果是 n-1 头,说明他的排名能被确定。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <queue> 6 #include <map> 7 #include <cmath> 8 #include <iomanip> 9 using namespace std; 10 11 typedef long long LL; 12 #define inf (1LL << 25) 13 #define rep(i,j,k) for(int i = (j); i <= (k); i++) 14 #define rep__(i,j,k) for(int i = (j); i < (k); i++) 15 #define per(i,j,k) for(int i = (j); i >= (k); i--) 16 #define per__(i,j,k) for(int i = (j); i > (k); i--) 17 18 const int N = 110; 19 int G[N][N]; 20 21 int main(){ 22 23 ios::sync_with_stdio(false); 24 cin.tie(0); 25 26 int n,m; 27 cin >> n >> m; 28 29 int u,v; 30 rep(i,1,m){ 31 cin >> u >> v; 32 G[u][v] = true; 33 } 34 35 rep(k,1,n) rep(i,1,n) rep(j,1,n){ 36 //i -> j 或者 i -> k -> j 37 G[i][j] = G[i][j] || (G[i][k] && G[k][j]); 38 } 39 40 int ans = 0; 41 rep(i,1,n){ 42 43 int tot = 0; 44 rep(j,1,n){ 45 //有联系 46 if(G[i][j] || G[j][i]) tot++; 47 } 48 //与其他n-1头牛有联系 49 if(tot == n - 1) ans++; 50 } 51 52 cout << ans << endl; 53 54 getchar(); getchar(); 55 return 0; 56 }
原文:https://www.cnblogs.com/SSummerZzz/p/11369060.html