Poj3660 Cow Contest 【传递闭包】

来源:互联网 发布:cdlinux安装软件 编辑:程序博客网 时间:2024/05/20 06:29

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;}
原创粉丝点击