void dfs(int u,int father){
if(sk==1) return;
vis[u]=1;
for(int i=head[u];i!=-1;i=ed[i].nx){
int j=ed[i].to;
if(j==father) continue;
if(vis[j]==1&&sk!=1){//如果此时又返回了,则找到环
//sk!=1是因为此时return的话,上一层还在进行下一个for循环
int z=u; //u的儿子是环的起点
sk=1;
do{
ans++;z=pre[z];
}while(z!=j);
return;
}
pre[j]=u;//存环的路径,j点的父亲
dfs(j,u);
}
}