P2419 [USACO08JAN] Cow Contest S
\(P2419 [USACO08JAN] Cow Contest S\)
题目翻译:
给出\(N\)和\(M\),\(N\)为牛的个数,\(M\)为关系总数,再给出\(M\)个关系\(a,b\)及\(a\)与\(b\)相比\(a\)能获胜。求有多少牛能确定它的排名
思路:
要求出哪些牛能够找出排名,及找到那些牛与其他牛的关系可以确定。因此我们令\(a\)到\(b\)有一条边,而我们只需要判断两点是否联通,及能够推出某点与其他点的关系。我们发现\(n \le 100\),因此我们可用\(floyd\)求出关系,
\[$f_{i,j}=f_{i,j} \lor (f_{i,k} \land f_{k,j})$
\]
因此跑一遍\(floyd\)在枚举所有点判断是否有有点与他联通,时间复杂度为 \(n^3\)
完整代码
#include<bits/stdc++.h>
using namespace std;
const int N=200;
int f[N][N];
int main(){
int n,m,a,b;
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a>>b;
f[a][b]=1;
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f[i][j]=f[i][j]|(f[i][k]&f[k][j]);
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
bool flag=true;
for(int j=1;j<=n;j++){
if(i==j)continue;
flag=flag&(f[i][j]|f[j][i]);
}
ans+=int(flag);
}
cout<<ans;
}
本文作者:XichenOC
本文链接:https://www.cnblogs.com/XichenOC/p/18682364
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步