//usage: ./Tsin #include #include #include int n, m; int* edges; int* G; int* firstOut; void create_adj(); void find_cut_edges(); int* cut_edges; int n_cut_edges; int* dfs; int* nd; int* lowpt; int* low; int* lowpt2; int* low2; int* tolow; int* parent; int Nr=1; void Find_cut_pairs(int); int* tree_edge_is_cutEdge; int* back_edge_is_cutEdge; void insert_edge(int,int,char); int* STACK; int* firstIndx; int* prevIndx; int SP=0; void push(int,int,int,int,int); void pop(int); int main(int n_args, char** args) { FILE* fp = fopen(args[1],"r"); fscanf(fp,"%d %d",&n,&m); edges = (int*)malloc(sizeof(int)*2*m); for(int i=0;ilowpt[v]) { push(v,v,tolow[v],low[v],low2[v]); } } //2.2 else { int sp=firstIndx[v]*4; int x=STACK[sp]; int y=STACK[sp+1]; int p=STACK[sp+2]; int q=STACK[sp+3]; //2.2.1 if(lowpt2[v]>dfs[q]) { push(v,v,tolow[v],q,low2[v]); } //2.2.2 else { while(firstIndx[v]!=-1 && lowpt2[v]<=dfs[p]) { pop(v); if(firstIndx[v]!=-1) { sp=firstIndx[v]*4; x=STACK[sp]; y=STACK[sp+1]; p=STACK[sp+2]; q=STACK[sp+3]; } } if(firstIndx[v]!=-1 && lowpt2[v]