bzoj1612 / P2419 [USACO08JAN]牛大赛Cow Contest(Floyd)

P2419 [USACO08JAN]牛大赛Cow Contest

Floyd不仅可以算最短路,还可以处理点之间的关系。

跑一遍Floyd,处理出每个点之间是否有直接或间接的关系。

如果某个点和其他$n-1$个点都有关系,那么它的排名就是可确定的。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define re register
 5 using namespace std;
 6 int n,m,d[302][302],ans;
 7 int main(){
 8     scanf("%d%d",&n,&m); int q1,q2;
 9     for(re int i=1;i<=m;++i) scanf("%d%d",&q1,&q2),d[q1][q2]=1;
10     for(re int k=1;k<=n;++k)
11         for(re int j=1;j<=n;++j)
12             for(re int i=1;i<=n;++i)
13                 d[i][j]|=d[i][k]&d[k][j];//(i,k),(k,j)都要有关系,(i,j)才有关系
14     for(re int i=1;i<=n;++i){
15         int tmp=1;
16         for(re int j=1;j<=n;++j)
17             if(i!=j) tmp&=d[i][j]|d[j][i];//是否与其他n-1个点都有关系
18         ans+=tmp;
19     }printf("%d",ans);
20     return 0;
21 }
View Code

猜你喜欢

转载自www.cnblogs.com/kafuuchino/p/9860648.html