POJ 3660(floyd)
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> #include <stack> #include <vector> #include <iomanip> using namespace std; int n,m,map[110][110]; int main(int argc, char *argv[]) { scanf("%d%d",&n,&m); for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) if(i==j) map[i][j]=0; else map[i][j]=1e9; for(int i=0;i<m;i++) { int a,b; scanf("%d%d",&a,&b); map[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(map[i][j]>map[i][k]+map[k][j]) map[i][j]=map[i][k]+map[k][j]; int sum=0; for(int i=1;i<=n;i++) { int sum1=0; for(int j=1;j<=n;j++) { if(i!=j) { if(map[i][j]!=1e9||map[j][i]!=1e9) sum1++; } } if(sum1==n-1) sum++; } printf("%d\n",sum); return 0; }