POJ3660
放水题是不是不太好...
#include<cstdio> #include<algorithm> using namespace std; int e[105][105]; int maxx[105]; int minn[105]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1; i<=m; i++) { int a,b; scanf("%d%d",&a,&b); e[b][a]=1; } for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) e[i][j]|=e[i][k]&e[k][j]; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) { if(e[i][j]) { minn[j]++; maxx[i]++; } } int ans=0; for(int i=1; i<=n; i++) { // printf("%d %d\n",maxx[i],minn[i]); if((maxx[i]+minn[i])==(n-1)) ans++; } printf("%d",ans); }