├── Biconnected components └── README.md /Biconnected components: -------------------------------------------------------------------------------- 1 | // Biconnected components 2 | # include 3 | # define NR 100005 4 | using namespace std; 5 | ifstream f("biconex.in"); 6 | ofstream g("biconex.out"); 7 | vector v[NR], sol[NR]; 8 | struct elem { 9 | int x, y; 10 | }st[NR]; 11 | 12 | int i,j,n,m,nrsol,VV,x,y; 13 | int T[NR], ap[NR], niv[NR], minn[NR]; 14 | 15 | void DFS (int k, int nivel, int tata) { 16 | ap[k]=1; niv[k]=nivel; minn[k]=nivel; T[k]=tata; 17 | for (auto &x: v[k]) { 18 | if (x!=tata) { 19 | if (! ap[x]) { 20 | ++VV; st[VV].x=k; st[VV].y=x; 21 | 22 | DFS (x, nivel+1, k); 23 | 24 | if (minn[x]>=nivel) { 25 | ++nrsol; 26 | while (st[VV].x!=k) { 27 | sol[nrsol].push_back(st[VV].y); 28 | --VV; 29 | } 30 | sol[nrsol].push_back(st[VV].x); 31 | sol[nrsol].push_back(st[VV].y); 32 | --VV; 33 | } 34 | minn[k]=min(minn[k], minn[x]); 35 | } else minn[k]=min(minn[k], niv[x]); 36 | } 37 | } 38 | } 39 | int main () 40 | { 41 | f>>n>>m; 42 | for (int i=1; i<=m; ++i) { 43 | f>>x>>y; 44 | v[x].push_back(y); 45 | v[y].push_back(x); 46 | } 47 | DFS(1, 1, 0); 48 | 49 | g<