为什么过不了洛谷的P8436 【模板】边双连通分量
只有50分
```c++
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
//#define
#define ll long long
const int N=5e5+5;
const int M=2e6+5;
int dfn[N],low[N];
int tot;
int n,m;
vector<int>q[M];
int in[N];
stack<int>e;
int col;
queue<int>p[N];
void tarjan(int x,int y){
dfn[x]=++tot;
low[x]=tot;
in[x]=1;
e.push(x);
for(auto it:q[x]){
if(!dfn[it]){
tarjan(it,x);
low[x]=min(low[x],low[it]);
}
else if(in[it]){
if(it!=y){
low[x]=min(low[x],dfn[it]);
}
}
}
if(low[x]==dfn[x]){
col++;
while(e.top()!=x){
p[col].push(e.top());
in[e.top()]=0;
e.pop();
}
//in[x]=0;
p[col].push(x);
e.pop();
}
}
void solve(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
q[a].push_back(b);
q[b].push_back(a);
}
for(int i=1;i<=n;i++){
if(!dfn[i]) tarjan(i,0);
}
cout<<col<<endl;
for(int i=1;i<=col;i++){
cout<<p[i].size()<<' ';
while(!p[i].empty()){
cout<<p[i].front()<<' ';
p[i].pop();
}
cout<<endl;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
//cin>>t;
while(t--) solve();
}
```