为什么样例没过但AC了
查看原帖
为什么样例没过但AC了
696882
Hongzixuan0922楼主2023/12/2 10:53

rt

#include<bits/stdc++.h>
using namespace std;
struct Edge
{
	int v,next;
}e[400005];
int n,m,en,head[400005];
void insert(int a,int b)
{
	e[++en].v=b;
	e[en].next=head[a];
	head[a]=en;
}
int sta[400005],low[400005],dfn[400005],id[400005],vis[400005],sum,sign,top;

void dfs(int u)//tarjan
{
	low[u]=dfn[u]=++sign;
	vis[u]=1;
	sta[++top]=u;
	for(int i=head[u];i!=0;i=e[i].next)
	{
		int v=e[i].v;
		if(!dfn[v])
		{
			dfs(v);
			low[u]=min(low[u],low[v]);
		}
		else if(vis[v])low[u]=min(low[u],low[v]);
	}
	if(low[u]==dfn[u])
	{
		++sum;
		int i=sta[top--];
		while(i!=u)
		{
			vis[i]=0;
			id[i]=sum;
			i=sta[top--];
		}
		vis[i]=0;
		id[i]=sum;
	}
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		insert((i<<1)-1,(i<<1)+(n<<1));
		insert((i<<1)-1+(n<<1),(i<<1));
		insert((i<<1),(i<<1)-1+(n<<1));
		insert((i<<1)+(n<<1),(i<<1)-1);
	}
	
	for(int i=1;i<=m;i++)
	{
		int a,b;
		cin>>a>>b;
		insert(a+(n<<1),b);
		insert(b+(n<<1),a);
	}
	
	for(int i=1;i<=2*n;i++)if(!dfn[i])dfs(i);
	
	for(int i=1;i<=2*n;i++)
	{
		if(id[i]==id[i+(n<<1)])
		{
			cout<<"NIE";
			return 0;
		}
	}
	for(int i=1;i<=n<<1;i++)
	{
		if(id[i]>id[i+(n<<1)])cout<<i<<endl; 
	}
	return 0;
}

样例输出: 1 4 5

我输出 2 3 6

但是

2023/12/2 10:53
加载中...