Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <stdio.h>#include <iostream>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <map>#include <set>using namespace std;typedef long long ll;#define N 20005#define M 200005#define MIN(a,b) ((a) < (b) ? (a) : (b))#define MAX(a,b) ((a) > (b) ? (a) : (b))int n,m,vis[N],parent[N],head[N],ne,low[N],cnt;struct Edge{int v,next;}e[M];void add_edge(int u,int v){e[ne].v=v,e[ne].next=head[u],head[u]=ne++;}struct EdgeAns{int u,v;EdgeAns(){}EdgeAns(int u,int v):u(u),v(v){}bool operator < (const EdgeAns &a)const{if(u == a.u) return v < a.v;return u < a.u;}bool operator == (const EdgeAns &a)const{