1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<algorithm>
5 using namespace std;
6 const int MAXN=1001+100;
7 int p[MAXN][MAXN];
8 int vis[MAXN],lk[MAXN];
9 int n,m;
10
11 void init()
12 {
13 scanf("%d%d",&n,&m);
14 for (int i=1;i<=m;i++)
15 {
16 int u,v;
17 scanf("%d%d",&u,&v);
18 p[i][u]=p[i][v]=1;
19 }
20 }
21
22 int find(int u)
23 {
24 for (int i=0;i<n;i++)
25 {
26 if (!vis[i] && p[u][i])
27 {
28 vis[i]=1;
29 if (!lk[i] || find(lk[i]))
30 {
31 lk[i]=u;
32 return 1;
33 }
34 }
35 }
36 return 0;
37 }
38
39 void Hungary()
40 {
41 memset(lk,0,sizeof(lk));
42 int ans=0;
43 for (int i=1;i<=m;i++)
44 {
45 memset(vis,0,sizeof(vis));
46 if (find(i)) ans++;else break;
47 /*我一开始写成了if (!find(i)) 那么输出i-1并且break..后来发现这样的话如果全部题都能够答,就没有输出了*/
48 }
49 cout<<ans<<endl;
50 }
51
52 int main()
53 {
54 init();
55 Hungary();
56 return 0;
57 }