Time Limits:
1000 ms Memory Limits: 262144 KB Detailed Limits
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define maxn 210 5 using namespace std; 6 int n,m,g[maxn][maxn],ans,match[maxn]; 7 bool f[maxn]; 8 int Dfs(int s) 9 { 10 for(int i=1;i<=n;i++) 11 if(f[i]==0&&g[s][i]==1) 12 { 13 f[i]=1; 14 if(match[i]==0||Dfs(match[i])) 15 { 16 match[i]=s; 17 return 1; 18 } 19 } 20 return 0; 21 } 22 int main() 23 { 24 scanf("%d%d",&n,&m); 25 int x,y;ans=n; 26 for(int i=1;i<=m;i++) 27 { 28 scanf("%d%d",&x,&y); 29 g[x][y]=1; 30 } 31 for(int k=1;k<=n;k++) 32 for(int i=1;i<=n;i++) 33 for(int j=1;j<=n;j++) 34 g[i][j]=g[i][j]||(g[i][k]&&g[k][j]); 35 for(int i=1;i<=n;i++) 36 { 37 memset(f,0,sizeof(f)); 38 ans-=Dfs(i); 39 } 40 printf("%d\n",ans); 41 return 0; 42 }