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;
}