P2419

原题链接

洛谷2419

分析

这题,一眼看过去,给了很多的不等关系,像是差分约束,但是保证不会矛盾,那就可以确认是个有向无环图了。

因此,我们考虑用拓扑排序。

但是此时,问题再次出现,如果这题像P1960 郁闷的记者的话,那求完之后,求一个最长路,确认一下其中最大的值是否等于n即可。

但这题需要确定,到底有几个点的排名是可以被确定的。

那就有意思了。

我们的解决方案是,先进行一下传递闭包,接下来对每个点就行单独计数,如果对该点而言,出度与入度的和=n-1的话,这可以确定排名。

这也很好理解,因为如果对一个点而言,其他所有点与其关系都是确定的话,它当然就确定了。

AC_Code

#include<bits/stdc++.h>
using namespace std;
const int N = 110,INF = 0x3f3f3f3f;
int g[N][N];
int n,m,ans;
int main()
{
    cin>>n>>m;
    while(m--)
    {
        int a,b;
        cin>>a>>b;
        g[a][b]=1;
    }
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                g[i][j]|=g[i][k]&g[k][j];
    for(int i=1;i<=n;i++)
    {
        int sum = 0;
        for(int j=1;j<=n;j++)
            if(g[i][j]||g[j][i])
                sum++;
        if(sum==n-1) ans++;
    }
    cout<<ans<<endl;
    return 0;
}
posted @ 2021-11-05 17:35  艾特玖  阅读(72)  评论(0)    收藏  举报