Pagini recente » Cod sursa (job #2384854) | Cod sursa (job #118509) | Cod sursa (job #2113077) | Cod sursa (job #1075594) | Cod sursa (job #696140)
Cod sursa(job #696140)
#include<fstream>
#define min(a,b) (a<b)?a:b
#define max(a,b) (a>b)?a:b
using namespace std;
int n,m,x,y,i,nr;
int niv[100002],nivmin[100002],st[100002],q,nrfii,start=1;
struct nod{int info;nod*adr;}*v[100002],*p;
short viz[100002],critic[100002];
ofstream g("biconex.out");
void afisare(int q)
{
while(q--)
{
if(st[q]==0)g<<"\n";
else
g<<st[q]<<" ";
}
}
void dfs(int t,int nd,int nv,int maxx)
{
viz[nd]=1;
niv[nd]=nivmin[nd]=nv;
nod*p=v[nd];
while(p)
{
if(p->info!=t && niv[p->info]<niv[nd]) st[++q]=p->info;
if(!viz[p->info])
{
if(nd==start)nrfii++;
dfs(nd,p->info,nv+1,maxx);
nivmin[nd]=min(nivmin[nd],nivmin[p->info]);
if(nivmin[p->info]>=niv[nd])
{
if(nd!=start)critic[nd]=1;
st[++q]=0;
nr++;
}
}
else
if(p->info!=t)
{
nivmin[nd]=min(nivmin[nd],niv[p->info]);
}
p=p->adr;
}
}
int main()
{
ifstream f("biconex.in");
f>>n>>m;
for(i=1;i<=m;i++)
{
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;
}
dfs(-1,1,1,0);
if(nrfii>2)critic[1]=1;
//afisare(q);
g<<nr;
f.close();g.close();
return 0;}