因为机器人是可以持续前进的,所以要求个闭包
#include #include #include #include #include #include #include #include #include #include #include #define pi acos(-1) #define ll long long #define mod 1000000007 using namespace std; const int N=500+5,maxn=100+5,inf=0x3f3f3f3f; int n,color[N]; bool used[N],ok[N][N]; bool match(int x) { for(int i=1;i<=n;i++) { if(!used[i]&&ok[x][i]) { used[i]=1; if(color[i]==-1||match(color[i])) { color[i]=x; return 1; } } } return 0; } int main() { ios::sync_with_stdio(false); cin.tie(0); int m; while(cin>>n>>m,n||m){ memset(ok,0,sizeof ok); while(m--){ int a,b; cin>>a>>b; ok[a][b]=1; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(!ok[i][j]) { for(int k=1;k<=n;k++) { if(ok[i][k]&&ok[k][j]) ok[i][j]=1; } } } } int ans=0; memset(color,-1,sizeof color); for(int i=1;i<=n;i++) { memset(used,0,sizeof used); ans+=match(i); } cout<