79 分求助
查看原帖
79 分求助
901195
__Luna__楼主2024/10/19 18:20

79 分的代码,我想知道错误的原因和修改方案:

#include<bits/stdc++.h>
using namespace std;
int n,s;
vector<int>a[100001];
queue<int>q;
int vis[100001],p,re[100001],h[100001];
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		memset(vis,0,sizeof(vis));
		memset(re,0,sizeof(re));
		memset(h,0,sizeof(h));
		cin>>n;
		s=0;
		p=n;
		for(int i=1;i<=n;i++)
		{
			a[i].clear();
		}
		for(int i=0,j,k;i<n-1;i++)
		{
			cin>>j>>k;
			a[j].push_back(k);
			a[k].push_back(j);
		}
		for(int i=1;i<=n;i++)
		{
			if(a[i].size()==1)
			{
				q.push(i);
			}
		}
		while(!q.empty())
		{
			int i=q.front();
			q.pop();
			int j;
			for(int l=0;l<a[i].size();l++)
			{
				if(a[a[i][l]].size()-h[a[i][l]]>1)j=a[i][l];
			}
			if(vis[i]==0)
			{
				while(re[p])p--;
				vis[i]=p;
				re[p]=1;
				if(vis[j]==0)
				{
					int k=n-p+1;
					while(re[k])k--;
					re[k]=1;
					vis[j]=k;
				}
			}
			h[j]++;
			if(a[j].size()-h[j]==1)q.push(j);
		}
		for(int i=1;i<=n;i++)
		{
			cout<<vis[i]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

记录(WA 了点 1,2)。
另外,我用暴力法特判的代码 WA 了全部的 Subtask 1,我想知道哪里写错了:

#include<bits/stdc++.h>
using namespace std;
int n,s;
vector<int>a[100001];
queue<int>q;
int vis[100001],p,re[100001],h[100001],sv[100001][2];
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		memset(vis,0,sizeof(vis));
		memset(re,0,sizeof(re));
		memset(h,0,sizeof(h));
		memset(sv,0,sizeof(sv));
		cin>>n;
		if(n<=8)
		{
			for(int i=0;i<n-1;i++)
			{
				cin>>sv[i][0]>>sv[i][1];
			}
			string ss="12345678";
			ss=ss.substr(0,n);
			do
			{
				for(int i=0;i<n-1;i++)
				{
					if(ss[sv[i][0]-1]-'0'+ss[sv[i][1]-1]-'0'>n+1)break;
					for(int j=0;j<n;j++)
					{
						cout<<ss[j]<<' ';	
					}
					cout<<endl;
					goto end;
				}
			}
			while(next_permutation(ss.begin(),ss.end()));
			end:continue;
		}
		s=0;
		p=n;
		for(int i=1;i<=n;i++)
		{
			a[i].clear();
		}
		for(int i=0,j,k;i<n-1;i++)
		{
			cin>>j>>k;
			a[j].push_back(k);
			a[k].push_back(j);
		}
		for(int i=1;i<=n;i++)
		{
			if(a[i].size()==1)
			{
				q.push(i);
			}
		}
		while(!q.empty())
		{
			int i=q.front();
			q.pop();
			int j;
			for(int l=0;l<a[i].size();l++)
			{
				if(a[a[i][l]].size()-h[a[i][l]]>1)j=a[i][l];
			}
			if(vis[i]==0)
			{
				while(re[p])p--;
				vis[i]=p;
				re[p]=1;
				if(vis[j]==0)
				{
					int k=n-p+1;
					while(re[k])k--;
					re[k]=1;
					vis[j]=k;
				}
			}
			h[j]++;
			if(a[j].size()-h[j]==1)q.push(j);
		}
		for(int i=1;i<=n;i++)
		{
			cout<<vis[i]<<" ";
		}
		cout<<endl;
	}
	return 0;
}
2024/10/19 18:20
加载中...