Pagini recente » Cod sursa (job #2279635) | Cod sursa (job #2346128) | Cod sursa (job #692433) | Cod sursa (job #2928009) | Cod sursa (job #442444)
Cod sursa(job #442444)
#include <iostream>
#include <fstream>
#define Nmax 10005
#define Mmax 100005
using namespace std;
struct lista{int inf; lista* urm;} *a[Nmax];
int nrvec[Nmax];
int main()
{
fstream f("bazin.in",ios::in), g("bazin.out",ios::out);
int n,m,viz[Nmax]={0},nrComp=1;
lista *nou;
f>>n>>m;
int i,x,y,j;
for(i=1;i<=m;i++)
{
f>>x>>y;
nrvec[x]++; nrvec[y]++;
nou=new lista;
nou->inf=y;
nou->urm=a[x]; //adaug pe y ca vecin lui x
a[x]=nou;
nou=new lista;
nou->inf=x; // adaug pe x va vecin lui y
nou->urm=a[y];
a[y]=nou;
}
lista *temp;
int vf=1,c[Nmax],p,u; //coada pt bf
int nr,max=-1;
do{
p=u=0;
c[++u]=vf; nr=1; //in componenta curenta avem un sg. nod
viz[vf]=nrComp;
while(p!=u)
{
vf=c[++p]; //extragere
if(p>Nmax-2)
p=0;
temp=a[vf];
for(i=1;i<=nrvec[vf];i++)
{
if(viz[temp->inf]==0)
{
c[++u]=temp->inf; if(u>Nmax-2) u=0;
viz[temp->inf]=nrComp;
nr++; //numar nodurile din componenta curenta
}
temp=temp->urm;
}
}
if(nr>max)
max=nr; //aleg nr maxim
nrComp++; //am terminat o componenta
vf=0;
for(i=1;i<=n;i++) //caut un varf nevizitat
if(viz[i]==0)
{ vf=i;
break;
}
}while(vf>0);
g<<nrComp-1; //cerinta b)
g.close();
f.close();
return 0;
}