题目链接:
http://poj.org/problem?id=3660
题意:
给出牛之间的强弱关系,让你确定有多少头牛能够确定其排名。
题解:
就是求出每个点的入度和出度的和,如果是n-1,就可以确定排名
floyd
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 typedef long long ll; 6 #define MS(a) memset(a,0,sizeof(a)) 7 #define MP make_pair 8 #define PB push_back 9 const int INF = 0x3f3f3f3f; 10 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL; 11 inline ll read(){ 12 ll x=0,f=1;char ch=getchar(); 13 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 14 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 15 return x*f; 16 } 17 ////////////////////////////////////////////////////////////////////////// 18 const int maxn = 1e5+10; 19 20 int g[105][105]; 21 22 int main(){ 23 int n=read(), m=read(); 24 for(int i=1; i<=m; i++){ 25 int u,v; scanf("%d%d",&u,&v); 26 g[u][v] = 1; 27 } 28 29 for(int k=1; k<=n; k++) 30 for(int i=1; i<=n; i++) 31 for(int j=1; j<=n; j++) 32 if(g[i][k]&&g[k][j]) 33 g[i][j] = 1; 34 35 int ans = 0; 36 for(int i=1; i<=n; i++){ 37 int cnt = 0; 38 for(int j=1; j<=n; j++){ 39 if(g[i][j] || g[j][i]) 40 cnt++; 41 } 42 // cout << cnt << endl; 43 if(cnt == n-1) 44 ans++; 45 } 46 47 printf("%d ",ans); 48 49 return 0; 50 }