1. 程式人生 > 其它 >P2419 [USACO08JAN]Cow Contest S

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; }