Pagini recente » Cod sursa (job #655529) | Cod sursa (job #2175246) | Cod sursa (job #1275406) | Cod sursa (job #2711269) | Cod sursa (job #694928)
Cod sursa(job #694928)
#include<fstream>
using namespace std;
int i,j,x,y,n,st,nivmin[100002],critic[100002],niv[100002],nrfiirad,fiu[3],q,m,nr;
struct nod{short info;nod*adr;}*v[100002],*p;
char viz[100002];
void dfs_biconex(int tata,int nd,int nv,int maxx)
{
viz[nd]='1';
nivmin[nd]=niv[nd]=nv;
if(tata==1) nrfiirad++;
nod *p=v[nd];
while(p)
{
if(!viz[p->info])
{
dfs_biconex(nd,p->info,nv+1,1);
if(nivmin[p->info]>maxx )maxx=nivmin[p->info];
}
else
{
if( nivmin[p->info] < nivmin[nd] ) nivmin[nd]=nivmin[p->info];
p=p->adr;
}
}
if(maxx<niv[nd]) {critic[nd]=1;q++; }
}
int main()
{
ifstream f("biconex.in");ofstream g("biconex.out");//caz special pt radacina
f>>n>>m;
while(f>>x>>y)
{
p=new nod;
p->info=y; p->adr=v[x]; v[x]=p;
p=new nod;
p->info=x; p->adr=v[y]; v[y]=p;
}
for(i=1;i<=n;i++)
if(!viz[i]) dfs_biconex(-1,i,1,1);
critic[1]=1;//critic[x]=1 <=> x nu e critic
if(nrfiirad>1)critic[1]=0;
for(i=1;i<=n;i++)
if(!critic[i])nr++;
g<<nr+1<<"\n";
return 0;}