WA 64求助
查看原帖
WA 64求助
319509
dd13613311929楼主2023/11/16 21:18

看了半天题解也没搞明白为啥WA了四个点

#include<bits/stdc++.h>
using namespace std;
const int N=100010,M=2000010;
int n,m,cnt=0,t;
int head[N],ver[M],nxt[M],tot=1;
int deg[N],stk[M],top;
vector<int>ans[N];
bool vis[M],vist[N];
void add(int x,int y){
	ver[++tot]=y;
	nxt[tot]=head[x],head[x]=tot;
}
void euler(int qd){
	cnt++;
	top=0;
	stk[++top]=qd;
	while(top>0){
		int x=stk[top],i=head[x];
		while(i&&vis[i]) i=nxt[i];
		if(i){
			stk[++top]=ver[i];
			vis[i]=vis[i^1]=1;
			head[x]=nxt[i];
		}
		else{
			top--;
			ans[cnt].push_back(x);
			vist[x]=1;
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	int a,b,s,t;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d%d",&a,&b,&s,&t);
		if(s^t){
			add(a,b),add(b,a);
			deg[a]++,deg[b]++;
		}
	}
	for(int i=1;i<=n;i++){
		if(deg[i]%2){
			printf("NIE\n");
			return 0;
		}
	}
	for(int i=2;i<=2*m;i+=2){
		if(!vis[m]&&!vist[ver[i]]) euler(ver[i]);
	}
	printf("%d\n",cnt);
	for(int i=1;i<=cnt;i++){
		int len=ans[i].size();
		printf("%d ",len-1);
		for(int j=0;j<len;j++){
			printf("%d ",ans[i][j]);
		}
		printf("\n");
	}
	return 0;
}
2023/11/16 21:18
加载中...