我不理解
查看原帖
我不理解
467328
BLePb楼主2022/1/18 11:48

这是个什么错误啊啊啊啊啊啊啊:

Wrong Answer.wrong answer Edge didn't exist

代码:

#include<bits/stdc++.h>
using namespace std;

#define re register int
const int N=100004,M=200003;
int n,m,cnt;
struct edge{
	int u,v;
	bool vis;
}to[M];
int fa[N],ans[N];
vector<int>t[N];

int find(int x)
{
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}
void dfs(int x,int f)
{
	cnt++;
	ans[x]=f;
	for(re i=0;i<t[x].size();i++)
	{
		if(!ans[t[x][i]])
			dfs(t[x][i],x);
	}
}
void krus()
{
	for(re i=1;i<=m;i++)
	{
		int nu=find(to[i].u),nv=find(to[i].v);
		if(nu==nv) continue;
		fa[nu]=nv;
		t[nu].push_back(nv);
		t[nv].push_back(nu);
		to[i].vis=1;
	}
	for(re i=1;i<=m;i++)
	{
		if(to[i].vis||(find(to[i].u)!=find(to[i].v))||ans[to[i].u]) continue;
		dfs(to[i].u,to[i].v);
	}
	if(cnt!=n)
	{
		putchar('N');
		putchar('I');
		putchar('E');
		putchar('\n');
	}
	else
	{
		cout<<"TAK"<<endl;
		for(re i=1;i<=n;i++)
			cout<<ans[i]<<endl;
	}
}

int main()
{
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(re i=1;i<=m;i++)
		cin>>to[i].u>>to[i].v;
	for(re i=1;i<=n;i++)
		fa[i]=i;
	krus();
	return 0;
}
2022/1/18 11:48
加载中...