Rank这种东西…根据定义来说就是个体在整体中的排名,那么一定需要知道这个个体和整体的关系才能知道Rank。
比如说,只有知道其他所有人的成绩,才能知道自己的排名是多少
那么问题转化为求有多少个能够 确定和其他所有点的关系 的点
传递闭包跟Floyed基本相同…就是把松弛操作改成了传递关系
需要注意的是,有关系指的是打败和被打败,要有两个判断
if(a[i][k] && a[k][j]) a[i][j] = 1;
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define debug(x) cerr<<#x<<"="<<x<<endl;
const int maxn = 110;
int n, a[maxn][maxn],m,ans;
int main() {
cin >> n >> m;
for(int i=1; i<=m; i++) {
int u,v;
cin >> u >> v;
a[u][v] = 1;
}
for(int k=1; k<=n; k++)
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(a[i][k] && a[k][j]) a[i][j] = 1;
int j;
for(int i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
if(i==j) continue;
if(!a[i][j] && !a[j][i]) break;
}
if(j == n+1) ans++;
}
printf("%d",ans);
return 0;
}

本文介绍了一种通过传递闭包来确定个体在整体中排名的算法实现过程,该算法类似于Floyd算法,通过判断矩阵元素来确定个体之间的传递关系,从而找出能够明确与其他所有个体建立关系的个体数量。

被折叠的 条评论
为什么被折叠?



