題目鏈接:www.Bkjia.com
利用floyd進行閉包的傳遞確定勝負關系。這樣所有點a能走到的點都是排名在a以後的。所有能走到點a的點都是排名在a以前的。如a點,排名在它之前的和排名在它之後的點之和為n-1,那麼它的排名就是確定的。
#include#include #include #include #include using namespace std; const int MAX = 110; int n,m; int rank[MAX][MAX]; int in[MAX] ,out[MAX]; int ans; int main () { int a,b; while (cin>>n>>m) { memset(rank,0,sizeof(rank)); memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); ans = 0; while (m--) { cin>>a>>b; rank[a][b] = 1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if (rank[i][k] == 1 && rank[k][j] == 1) rank[i][j] =1; } for(int i=1;i<=n;i++) { int res = 0; for(int j=1;j<=n;j++) res += rank[i][j] + rank[j][i]; if (res == n-1) ans++; } cout<