Pagini recente » Cod sursa (job #1032317) | Cod sursa (job #2898068) | Cod sursa (job #778913) | Cod sursa (job #646317) | Cod sursa (job #1531103)
#include <cstdio>
#include <vector>
#include <algorithm>
#define NMAX 100005
using namespace std;
vector < long > g[NMAX];
vector < long > dfs_disc,dfs_low,art_vrt,dfs_parent;
long rootChild,n,m,dfsRoot,time,u,v,cnt,newv[NMAX],viz[NMAX];
void art_point (long u)
{
long j,v;
time++;
dfs_disc[u]=dfs_low[u]=time;
for(j=0;j<g[u].size();j++)
{
v=g[u][j];
if(!dfs_disc[v]){
dfs_parent[v]=u;
if(u==dfsRoot)
rootChild++;
art_point(v);
if(dfs_low[v]>=dfs_disc[u])
art_vrt[u]=true;
dfs_low[u]=min(dfs_low[u],dfs_disc[v]);
}
else if(v!=dfs_parent[u])
dfs_low[u]=min(dfs_low[u],dfs_disc[v]);
}
}
int main()
{
freopen("biconex.in","r",stdin);
freopen("biconex.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(long i=1;i<=m;i++)
{
scanf("%ld%ld",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
dfs_parent.assign(n+1,-1);
art_vrt.assign(n+1,0);
dfs_low.assign(n+1,0);
dfs_disc.assign(n+1,0);
for(long i=1;i<=n;i++)
{
if(!dfs_disc[i])
{
dfsRoot=i,rootChild=0;
art_point(i);
art_vrt[dfsRoot]=(rootChild>1);
}
}
for(long i=1;i<=n;i++)
if(art_vrt[i])
cnt++;
printf("%ld\n",cnt);
return 0;
}
/*void makevrt(long u){
long i,j,v;
newv[++newv[0]]=u;
viz[u]=poz;
for(i=0;i<g[i].size();i++)
{
v=g[u][i];
if(viz[v]!=poz)
{
if(!art_vrt[v])
makevrt(v);
else {
newv[++newv[0]]=v;
viz[v]=poz;
}
}
}
}
*/
/*long poz=0;
for(long i=1;i<=n;i++)
{
if(art_vrt[i])
{
poz++;
}
}*/