P2419 [USACO08JAN]牛大赛Cow Contest

  Floyd不仅能求出最短路,还能利用或运算,与运算判断两点是否连通。

  小范围数据,Floyd经常是很好的思路!

  代码!

  

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
#define maxn 200
int f[maxn][maxn];
int n,m;
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1; i<=m; i++)
    {
        int a,b;
        scanf("%d%d",&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++)
    {
        int sum=1;
        for(int j=1; j<=n; j++)
        {
            if(f[i][j]||f[j][i]) sum++;
        }
        if(sum==n) ans++;
    }
    printf("%d",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/popo-black-cat/p/10698396.html