#include #include #include #include #include #include using namespace std; #define MAXN 1005 bool reach[MAXN][MAXN]; int map[MAXN][MAXN]; char s[1005]; int d[MAXN],n; struct pt { int d,x; }; void BFS(int x) { int i,j; pt now,next; queue q; now.x=x; now.d=0; d[now.x]=now.d; q.push(now); while(!q.empty()) { now=q.front(); q.pop(); if (now.d>n+2) break; for(i=1;i<=map[now.x][0];i++) { next.x=map[now.x][i]; next.d=now.d+1; if (next.d0) {reach[x][y]=1;map[x][++map[x][0]]=y;} } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) d[j]=0x1fffff; BFS(i); } sum=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) sum+=reach[i][j]; printf("%d\n",sum); } return 0; }