P2419 [USACO08JAN]Cow Contest S

题目链接:https://www.luogu.com.cn/problem/P2419

思路:floyd
floyd的核心思想是通过枚举中间点来确定两点之间的最短距离。对于这道题来说通过枚举中间的牛来确定这两只牛是否有关系。
f[x][y]表示x赢了y,也表示x和y连通。要想知道一个牛的排名是否确定,就需要看其他牛是否和这个点连通。比如说有n头牛,对于剩下n-1头牛中,他们都要与这头牛有关系,可能是这头牛输,也可能是这头牛赢
只有这n-1头牛都和这只牛有关系了,我们才能知道这头牛的排名。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=110; int n,m; int arr[maxn][maxn]; int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int t1,t2; cin>>t1>>t2; arr[t1][t2]=1; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ for(int k=1;k<=n;k++){ arr[j][k]=arr[j][k] || arr[j][i]&&arr[i][k]; } } } int ans=0; for(int i=1;i<=n;i++){ int flag=1; for(int j=1;j<=n;j++){ if(i==j)continue; flag=flag&&(arr[i][j]|| arr[j][i]); } ans+=flag; } cout<<ans; return 0; }

 

posted @ 2021-07-31 16:14  ZangYiDe  阅读(137)  评论(0)    收藏  举报