wa63分求助
查看原帖
wa63分求助
378346
expnoi楼主2023/7/12 11:55
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
	int s=0,w=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-')w=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')s=(s<<3)+(s<<1)+(c^48),c=getchar();
	return s*w;
}
inline void print(int x)
{
	if(x<0)x=-x,putchar('-');
	if(x>=10)print(x/10);
	putchar(x%10+48);
}
int n,m;
struct node{
	int v,next,flg;
}e[1000010];
int eid=0,head[1000010],in[1000010],vis[1000010],visit[1000010],vv[1000010],num;
inline void insert(int u,int v)
{
	e[eid].v=v;
	e[eid].next=head[u];
	head[u]=eid++;
}
stack<int> st;
inline void dfs(int u)
{
	for(int i=head[u];~i;i=head[u])
	{
		head[u]=e[i].next;
		int v=e[i].v;
		if(e[i].flg)continue;
		e[i].flg=e[i^1].flg=1;
		dfs(v);
	}
	st.push(u);
}
inline void Dfs(int u,int col)
{
	visit[u]=col;
	for(int i=head[u];~i;i=e[i].next)
	{
		int v=e[i].v;
		if(vv[i]||vv[i^1])continue;
		vv[i]=1;
		num++;
		if(!visit[v])
		Dfs(v,col);
	}
}
int ans=0;
vector<int> G[100010];
int main()
{
	memset(head,-1,sizeof(head));
	n=read();
	m=read();
	int s=1;
	for(int i=1;i<=m;i++)
	{
		int u=read(),v=read(),s=read(),t=read();
		int w=s^t;
		if(w==1)
		{
			insert(u,v);
			insert(v,u);
			in[u]++;
			in[v]++;
		}
	}
	int tot=0;
	for(int S=1;S<=n;S++)
	{
		if(visit[S])continue; 
		num=0;
		Dfs(S,++tot);
		//puts("");
		int cnt=0;
		s=0;
		for(int i=1;i<=n;i++)
		{
			if(visit[i]==tot)
			{
				if(!s)
				s=i;
			}
		}
		for(int i=1;i<=n;i++)
		{
			if((in[i]&1)&&visit[i]==tot)
			{
				if(!s)s=i;
				cnt++;
			}
		}
		//cout<<s<<"\n";
		if(cnt!=0&&cnt!=2)
		{
			puts("NIE");
			return 0;
		}
		dfs(s);
		//cout<<"num:"<<num<<"\n";
		if(st.size()!=num+1)
		{
			puts("NIE");
			return 0;
		}
		ans++;
		while(st.size())
		{
			int u=st.top();
			st.pop();
			G[ans].push_back(u);
			if(vis[u])
			{
				for(int i=0;i<G[ans].size();i++)
				{
					vis[G[ans][i]]=0;
				}
				ans++;
				G[ans].push_back(u);
			}
			vis[u]=1;
		}
		if((int)G[ans].size()==1)G[ans].pop_back(),ans--;
	}
	print(ans);
	puts("");
	for(int i=1;i<=ans;i++)
	{
		if(G[i].size()==1)
		{
			while(1)
			{
				puts("DeaphetS");
			}
		}
		print((int)G[i].size()-1);
		putchar(' ');
		for(int u:G[i])
		{
			print(u);
			putchar(' ');
		}
		puts("");
	}
}

先不管复杂度的问题了。

2023/7/12 11:55
加载中...