Ranking the Cows(Floyd+位运算)

[USACO 2007 Mar G]Ranking the Cows

题目链接:Ranking the Cows
考点:Floyd+位运算
题意:给出m条比较关系,求还需要几条比较,才能排序好n个数
思路比较好想:

  • f[i][j]表示i是否大于j
  • 用Floyd变形算法来更新所有的F[i][j]
    代码部分:
   
bitset<1009> a[1009];
void slove(){
    int n,m;
    cin>>n>>m;
    int x,y;
    rep(i,1,m){
        cin>>x>>y;
        a[x][y]=1;
    }
    rep(k,1,n)
        rep(i,1,n){
        if(a[i][k])a[i]|=a[k];//如果i大于k,那么i>所有k大于的点。
    }
    int ans=0;
    rep(i,1,n){
        for(int j=i+1;j<=n;j++)
            if(a[i][j]==0&&a[j][i]==0)ans++;//如果既不知道i是否大于j也不知道j是否大于i,就要比较一次
    }
    cout<<ans;
}
posted @ 2023-11-07 22:04  锦林不睡觉  阅读(13)  评论(0)    收藏  举报