Pagini recente » Cod sursa (job #2326554) | Cod sursa (job #2635538) | Cod sursa (job #2632804) | Cod sursa (job #2265748) | Cod sursa (job #263664)
Cod sursa(job #263664)
#include<stdio.h>
#define N 100005
#define M 200005
int *a[N],d[N],x[M],y[M],n,m,num,viz[M];
void dfs(int x0)
{
viz[x0]=1;
for (int i=1; i<=a[x0][0]; ++i)
{
if (!viz[a[x0][i]])
dfs(a[x0][i]);
}
}
void citire()
{
freopen("dfs.in","r",stdin);
freopen("dfs.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1; i<=m; ++i)
{
scanf("%d%d",&x[i],&y[i]);
++d[x[i]];
++d[y[i]];
}
for (int i=1; i<=n; ++i)
{
a[i]= new int [1+d[i]];
a[i][0]=0;
}
for (int i=1; i<=m; ++i)
{
a[x[i]][++a[x[i]][0]]=y[i];
a[y[i]][++a[y[i]][0]]=x[i];
}
for (int i=1; i<=n; ++i)
{
for (int j=1; j<=a[i][0]; ++j)
if (!viz[a[i][j]])
{
dfs(a[i][j]);
++num;
break;
}
}
for (int i=1; i<=n; ++i)
if (!viz[i]) ++num;
/*for (int i=1; i<=n; ++i)
{
printf("%d ",i);
for (int j=1; j<=a[i][0]; ++j)
printf("%d ",a[i][j]);
printf("\n");
}*/
printf("%d",num);
}
int main()
{
citire();
return 0;
}