Cod sursa(job #694936)

Utilizator batistaUPB-Oprea-Cosmin-Dumitru batista Data 28 februarie 2012 09:27:01
Problema Componente biconexe Scor 4
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#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;}