Bridge Network


 
#define mx 110
#define _min(i,j) ((i)>(j)?(j):(i))

int d[mx],low[mx],t;
bool color[mx],artp[mx];
vector < int > M[mx];
vector < pii > bridge;
void dfs(int par, int u){
	int sz,i,v;
	low[u] = d[u] = ++t;
	color[u] = 1;
	sz = M[u].size();
	for(i=0;i<sz;i++){
		v = M[u][i];
		if(v==par)continue;
		if(!color[v]){
			dfs(u,v);
			low[u] = _min(low[u],low[v]);
			if(low[v] > d[u])
				bridge.push_back(pii(u,v));
		}
		else low[u] = _min(low[u],d[v]);
	}
}