为啥崩溃啊萌新没看出来
codeforces的提示也没看出有什么问题
https://codeforces.com/contest/1364/submission/286570838
#include<bits/stdc++.h>
using namespace std;
int head[100010];
struct Edge{
int v,nxt;
}edge[400010]; int cntE;
void addedge(int u,int v){
edge[++cntE].v=v;
edge[cntE].nxt=head[u];
head[u]=cntE;
}
bool vis[100010];
int cnt=0;
int n,m,k,u,v;
void dfs(int u){
vis[u]=1; cnt++;
for(int i=head[u];i;i=edge[i].nxt){
if(cnt==k) return;
if(vis[edge[i].v]==0) dfs(edge[i].v);
}
}
bool vis2[100010];
bool istree(int u,int fa){
bool res=1;
vis2[u]=1;
for(int i=head[u];i;i=edge[i].nxt){
if(vis[edge[i].v]==0) continue;
if(edge[i].v==fa) continue;
if(vis2[edge[i].v]) return 0;
else res|=istree(edge[i].v,u);
}
return res;
}
vector<int> a[2];
void treesolve(int u,int fa,int dep){
a[dep].push_back(u);
for(int i=head[u];i;i=edge[i].nxt){
if(vis[edge[i].v]==0||edge[i].v==fa) continue;
treesolve(edge[i].v,u,dep^1);
}
}
bool considered[100010];
stack<int> st;
int anslis[100010]; int len=0;
bool graphsolve(int u,int fa){
// printf("%d %d\n",u,fa);
if(considered[u]==1){
while(!st.empty()){
anslis[++len]=st.top();
if(st.top()==u) return 0;
st.pop();
}
return 0;
}
considered[u]=1; st.push(u);
for(int i=head[u];i;i=edge[i].nxt){
if(vis[edge[i].v]==0||edge[i].v==fa) continue;
if(graphsolve(edge[i].v,u)==0) return 0;
}
return 1;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++){
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
dfs(1);
// for(int i=1;i<=n;i++) printf("%d ",vis[i]); putchar('\n');
if(istree(1,0)){
treesolve(1,0,0);
int x=0;
if(a[1].size()>=(k+1)/2) x=1;
// printf("%d %d %d\n",a[0].size(),a[1].size(),x);
printf("1\n");
for(int i=0;i<(n+1)/2;i++) printf("%d ",a[x][i]);
}else{
graphsolve(1,0);
printf("2\n%d\n",len);
for(int i=1;i<=len;i++) printf("%d ",anslis[i]);
}
}