Floyd不仅能求出最短路,还能利用或运算,与运算判断两点是否连通。
小范围数据,Floyd经常是很好的思路!
代码!
#include<cstdio> #include<iostream> #include<cstring> using namespace std; #define maxn 200 int f[maxn][maxn]; int n,m; int main() { scanf("%d%d",&n,&m); for(int i=1; i<=m; i++) { int a,b; scanf("%d%d",&a,&b); f[a][b]=1; } for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) f[i][j]=f[i][j]|(f[i][k]&f[k][j]); int ans=0; for(int i=1; i<=n; i++) { int sum=1; for(int j=1; j<=n; j++) { if(f[i][j]||f[j][i]) sum++; } if(sum==n) ans++; } printf("%d",ans); return 0; }