不知道哪里挂了,求大佬指点/bx
#include<cstdio>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=2.5e5+5;
int n,m,k,cnt,cnt_leaf,leaf[maxn],p[maxn],dep[maxn],fa[maxn],ancestor[maxn][105];
int maxdep,ed;
template <typename T>
inline void read(T &x)//快读
{
char c;
x=0;
int fu=1;
c=getchar();
while(c>57||c<48){
if(c==45){
fu=-1;
}
c=getchar();
}
while(c<=57&&c>=48)
{
x=(x<<3)+(x<<1)+c-48;
c=getchar();
}
x*=fu;
}
struct node{
int v,next;
}e[maxn*2];
void insert(int u,int v){
cnt++;
e[cnt].v=v;
e[cnt].next=p[u];
p[u]=cnt;
}
void dfs(int u,int f,int deep){
dep[u]=deep;
if(dep[u]>maxdep){
maxdep=dep[u];
ed=u;
// cout<<maxdep<<" "<<ed<<endl;
}
fa[u]=f;
leaf[++cnt_leaf]=u;
for(int i=p[u];i!=-1;i=e[i].next){
int v=e[i].v;
if(v==f) continue;
if(dep[v]){
ancestor[u][++ancestor[u][0]%100]=v;
continue;
}
if(leaf[cnt_leaf]==u) cnt_leaf--;
dfs(v,u,deep+1);
}
}
void print(int u,int to){
printf("%d ",to);
if(u==to) return;
print(u,fa[to]);
}
int main(){
// ios::sync_with_stdio(false);
memset(p,-1,sizeof(p));
// memset(dep,0x3f,sizeof(dep));
read(n);
read(m);
read(k);
for(int i=1;i<=m;i++){
int u,v;
read(u);
read(v);
insert(u,v);
insert(v,u);
}
dfs(1,-1,1);
if(maxdep>=(n-1)/k+1){
puts("PATH");
printf("%d\n",maxdep);
while(ed!=-1){
printf("%d ",ed);
ed=fa[ed];
}
return 0;
}
puts("CYCLES");
for(int i=1;i<=k;i++){
int u=leaf[i],x=ancestor[u][1],y=ancestor[u][2];
if(dep[x]>dep[y]) swap(x,y);
if((dep[u]-dep[x]+1)%3!=0){
printf("%d\n",dep[u]-dep[x]+1);
print(x,u);
puts("");
}else{
if((dep[u]-dep[y]+1)%3!=0){
printf("%d\n",dep[u]-dep[y]+1);
print(y,u);
puts("");
}else{
printf("%d\n%d ",dep[y]-dep[x]+2,u);
print(x,y);
puts("");
}
}
}
return 0;
}