编程语言
首页 > 编程语言> > Cow Contest(Warshall算法+结论)

Cow Contest(Warshall算法+结论)

作者:互联网

在这里插入图片描述
在这里插入图片描述
这道题终于把离散数学学到的Warshall算法用上了,好开心;所以比赛是最好的知识使用场;
这道题根据题意可以知道,A wins B ,Bwins C就可以知道A wins C所以这很明显就是传递闭包,然后最后去求位置确定的个数,那么得到确定位置的个数那么就必须知道这点:如果A 赢了x头牛,输给了y头牛,那么如果A的位置确定就应该有x+y==n-1;
所以最后利用Warshall算法求出传递闭包然后各自扫一遍就出来答案了:

#include<bits/stdc++.h>
using namespace std;
int R[200][200];
int main(){
	int n,m,a,b;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		  cin>>a>>b;
		  R[a][b]=1;
	}
	for(int i=1;i<=n;i++){//warshall算法
		  for(int k=1;k<=n;k++){
		  	  if(R[k][i]){
		  	  	  for(int j=1;j<=n;j++){
		  	  	  	   if(R[i][j]) R[k][j]=1;
					  }
				}
		  }
	}
	int temp;
	int ans=0;
	for(int i=1;i<=n;i++){
		 temp=0;
		  for(int j=1;j<=n;j++){
		  	  if(R[i][j])temp++;
		  }
		  for(int k=1;k<=n;k++){
		  	  if(R[k][i])temp++;
		  }
		  if(temp==n-1)ans++;
	}
	printf("%d\n",ans);
	
	 return 0;
}

标签:闭包,200,Cow,Contest,Warshall,int,算法,这道题
来源: https://blog.csdn.net/qq_44555205/article/details/97626146