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;
}

浙公网安备 33010602011771号