在今年的 NOIP 中,考生 ZJ-0147 在 T3 代码中使用 vector<vector<int> > adj; 存储树,并使用以下代码读入:
while(t--)
{
adj.clear();
adj.shrink_to_fit();
scanf("%d %d",&n,&k);
adj.resize(n+5);
for(int i=1;i<n;i++)
{
scanf("%d %d",&nums[i].u,&nums[i].v);
adj[nums[i].u].push_back(nums[i].v);
adj[nums[i].v].push_back(nums[i].u);
}
if(c==18)
{
printf("1\n");
continue;
}
/*
task 1 to 6
*/
}
最终未能拿到链的 4pts。随后,该考生在赛后自测时,将代码微调为如下形式:
while(t--)
{
if(c==18)
{
printf("1\n");
continue;
}
adj.clear();
adj.shrink_to_fit();
scanf("%d %d",&n,&k);
adj.resize(n+5);
for(int i=1;i<n;i++)
{
scanf("%d %d",&nums[i].u,&nums[i].v);
adj[nums[i].u].push_back(nums[i].v);
adj[nums[i].v].push_back(nums[i].u);
}
if(k>1)
{
printf("%d\n",pi[n-2]);
continue;
}
/*
task 1 to 6
*/
}
观察到除测试点 18 以外,7 至 25 中的所有测试点全部 RE。
请大佬分析一下原因,并给出二维 vector 的存图建议。
(我寻思我学了这么久 OI 这样存图从来没出过事啊,怎么就这回挂了呢?)