应该不是,肯定是hack
by 智子·起源 @ 2023-03-23 11:28:21
现在是#2#8WA
by 智子·起源 @ 2023-03-23 11:30:58
```cpp
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100005;
int n,m;
int head[MAXN*20],nxt[MAXN*20],des[MAXN*20];
int tot=-1;
bool vis[MAXN*20];
void Add(int x,int y){
nxt[++tot]=head[x];
des[tot]=y;
head[x]=tot;
}
int fa[MAXN];
int getfa(int x){
if(fa[x]!=x)return fa[x]=getfa(fa[x]);
return x;
}
void Merge(int x,int y){
x=getfa(x),y=getfa(y);
fa[y]=x;
}
int K;
int du[MAXN];
int t[MAXN];
int ans[MAXN],ansn;
void dfs(int x){
for(int i=head[x];i>-1;i=nxt[i]){
if(vis[i])continue;
vis[i]=vis[i^1]=1;
dfs(des[i]);
}
ans[++ansn]=x;
}
int main(){
scanf("%d%d",&n,&m);
memset(head,-1,sizeof(head));
for(int i=1;i<=n;++i)
fa[i]=i;
for(int i=0;i<m;++i){
int t1,t2,t3,t4;
scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
if(t3!=t4){
++du[t1],++du[t2];
Add(t1,t2);
Add(t2,t1);
Merge(t1,t2);
}
}
for(int i=1;i<=n;++i){
// if(!du[i])
// return puts("NIE"),0;
if(du[i]%2)
return puts("NIE"),0;
fa[i]=getfa(i);
if(fa[i]==i)++K;
}
printf("%d\n",K);
for(int i=1;i<=n;++i){
if(!du[i])continue;
if(fa[i]==i){
ansn=0;
dfs(i);
printf("%d ",ansn-1);
for(int j=ansn;j;--j){
printf("%d ",ans[j]);
}
printf("\n");
}
}
return 0;
}
```
by 智子·起源 @ 2023-03-23 11:31:13