#include
#include
/*
ÐайÑи колиÑеÑÑво ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÑвÑзноÑÑи неоÑиенÑиÑованного гÑаÑа пÑи помоÑи поиÑка в глÑбинÑ.
ФоÑÐ¼Ð°Ñ Ð²Ñ
однÑÑ
даннÑÑ
:
Ðа вÑ
од подаÑÑÑÑ Ð¾Ð¿Ð¸Ñание гÑаÑа. РпеÑвой ÑÑÑоке ÑÐºÐ°Ð·Ð°Ð½Ñ Ð´Ð²Ð° наÑÑÑалÑнÑÑ
ÑиÑла, ÑазделеннÑе
пÑобелом: ÑиÑло веÑÑин vâ¤1000 и ÑиÑло ÑÑÐ±ÐµÑ eâ¤1000. Ð ÑледÑÑÑиÑ
e ÑÑÑокаÑ
ÑодеÑжаÑÑÑ Ð¾Ð¿Ð¸ÑаниÑ
ÑÑбеÑ. Ðаждое ÑебÑо задаÑÑÑÑ ÑазделÑнной пÑобелом паÑой номеÑов веÑÑин, коÑоÑÑе ÑÑо ÑебÑо
ÑоединÑеÑ. СÑиÑаеÑÑÑ, ÑÑо веÑÑÐ¸Ð½Ñ Ð³ÑаÑа пÑонÑмеÑÐ¾Ð²Ð°Ð½Ñ ÑиÑлами Ð¾Ñ 1 до v.
ФоÑÐ¼Ð°Ñ Ð²ÑÑ
однÑÑ
даннÑÑ
:
Ðдно ÑиÑло â колиÑеÑÑво ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÑвÑзноÑÑи гÑаÑа.
Sample Input 1:
4 2
1 2
3 2
Sample Output 1:
2
Sample Input 2:
4 3
1 2
3 2
4 3
Sample Output 2:
1
*/
void dfs(int i, std::vector &v, int adj[][2], int max)
{
v[i] = true;
for (int j = 1; j < max; ++j)
{
if (adj[j][0] == adj[j][1] && adj[j][1] == i)
return ;
if (adj[j][0] == i || adj[j][1] == i)
{
if (!v[adj[j][0]])
dfs(adj[j][0], v, adj, max);
else if (!v[adj[j][1]])
dfs(adj[j][1], v, adj, max);
}
}
}
int main(void)
{
int v = 0;
int e = 0;
std::cin >> v >> e;
if (v < 0 || e < 0)
return 1;
else if (v == 0 || e == 0)
{
std::cout << v << std::endl;
return 0;
}
++v;
++e;
std::vector ver(v);
for (bool i : ver)
i = false;
int adj[e][2];
adj[0][0] = 0;
adj[0][1] = 0;
for (int j = 1; j < e; ++j)
std::cin >> adj[j][0] >> adj[j][1];
int res = 0;
int j = 1;
while (j < ver.size())
{
if (j < ver.size() && ver[j])
{
while (j < ver.size() && ver[j])
++j;
++res;
}
else/*if (j < ver.size() && !ver[j])*/
{
dfs(j, ver, adj, e);
while (j < ver.size() && ver[j])
++j;
++res;
}
}
std::cout << res << std::endl;
return 0;
}