Pagini recente » Cod sursa (job #157648) | Cod sursa (job #1762534) | Cod sursa (job #2240031) | Cod sursa (job #1514143) | Cod sursa (job #1082340)
#include <cstdio>
using namespace std;
int n,m,c=0;
struct varf
{
varf* u;
int x;
}*v[100000];
struct lista
{
lista *u,*a;
int x;
}*p,*poz[100000];
void adaugavecin(int x,int y)
{
varf *p;
p=new varf;
p->u=v[x];
p->x=y;
v[x]=p;
}
void read()
{
freopen("dfs.in","r",stdin);
scanf("%d%d",&n,&m);
int x,y;
while(m)
{
--m;
scanf("%d%d",&x,&y);
--x;--y;
adaugavecin(x,y);
adaugavecin(y,x);
}
}
void parcur(int x)
{
if(p==poz[x])
{
p=poz[x]->u;
}
else
{
poz[x]->a->u=poz[x]->u;
poz[x]->u->a=poz[x]->a;
}
poz[x]='\0';
while(v[x])
{
if(poz[v[x]->x]) parcur(v[x]->x);
v[x]=v[x]->u;
}
}
void write()
{
freopen("dfs.out","w",stdout);
printf("%d",c);
}
int main()
{
read();
poz[n-1]=new lista;
poz[n-1]->u='\0';
poz[n-1]->x=n-1;
p=poz[n-1];
for(int i=n-2;i>=0;--i)
{
poz[i]=new lista;
poz[i]->x=i;
poz[i]->u=p;
p->a=poz[i];
p=poz[i];
}
p->a='\0';
while(p)
{
++c;
parcur(p->x);
}
write();
return 0;
}