#2WA #8TLE,都是map的错,对吗qwq
查看原帖
#2WA #8TLE,都是map的错,对吗qwq
90971
智子·起源楼主2023/3/21 21:02

RT

#include<bits/stdc++.h>
using namespace std;
const int MAXN=100005;
int n,m;
vector<int>g[MAXN];

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];
map<pair<int,int>,bool>killed;
int t[MAXN];
int ans[MAXN],ansn;
void dfs(int x){
	int glen=g[x].size();
	while(t[x]<glen){
		int v=g[x][t[x]++];
		if(killed[make_pair(x,v)])continue;
		killed[make_pair(x,v)]=killed[make_pair(v,x)]=1;
		dfs(v);
	}
	ans[++ansn]=x;
}
int main(){
	scanf("%d%d",&n,&m);
	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];
			g[t1].push_back(t2);
			g[t2].push_back(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(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;
}
2023/3/21 21:02
加载中...