#include<bits/stdc++.h>
#define NOC ios::sync_with_stdio(0);cin.tie();cout.tie();
#define up(a,b) for(int i=a;i<=b;i++)
#define dn(a,b) for(int i=a;i>=b;i--)
using namespace std;
const int maxn=1e5+2;
struct node
{
    int x;
    int y;
    bool operator<(const node& other) const 
    {
        if (x == other.x) return y > other.y;
        return x > other.x;
    }
};
struct tree
{
	int num,str,fa=-1;
    vector<node>son;
}lst[maxn];
bool cmp(node a,node b)
{
	return a.y>b.y;
}
int main(){
	NOC;
    int n,q;
    cin>>n>>q;
    lst[1].fa=-114514;
    for(int i=1;i<=n;i++)
    {
        lst[i].num=i;
        int x;
        cin>>x;
        lst[i].str=x;
        lst[i].son.push_back({i,x});
    }
    for(int i=1;i<=n;i++)
    {
        int u,v;
        cin>>u>>v;
        if(lst[u].fa==-114514)
        {
            lst[v].fa=u;
            lst[u].son.push_back({v,lst[v].str});
            continue;
        }
        if (lst[u].fa==-1)
        {
            lst[u].fa=v;
            lst[v].son.push_back({u,lst[u].str});
            lst[1].son.push_back({u,lst[u].str});
        }
        else
        {
            lst[v].fa=u;
            lst[u].son.push_back({v,lst[v].str});
            lst[1].son.push_back({u,lst[u].str});
        }
    }
    for(int i=1;i<=n;i++) for(auto j:lst[i].son) lst[1].son.push_back(j);
    for(int i=1;i<=n;i++)
	{
        sort(lst[i].son.begin(),lst[i].son.end(),cmp);
        set<node>aaaa(lst[i].son.begin(),lst[i].son.end());
        lst[i].son.assign(aaaa.begin(),aaaa.end());
	}
    for(int i=1;i<=n;i++)
	{
		for(auto j:lst[i].son) cout<<j.x<<' '<<j.y<<"|";
		cout<<endl;
	}
    int v,k;
    while(q--)
    {
        v=k=0;
        cin>>v>>k;
        cout<<v<<' '<<k<<' '<<lst[v].son[k].y<<endl;
    }
	return 0;
}

这个代码为什么RE了 正常输出

5 5|4 4|3 3|2 2|1 1|
5 5|3 3|2 2|
3 3|
4 4|
5 5|
1 2 4
2 1 5

我的输出

5 5|4 4|3 3|2 2|1 1|
5 5|3 3|2 2|
3 3|
4 4|
5 5|
2 1 5
2 1 5

1 条评论

  • @ 2025-8-21 20:26:11

    读入错误

    树有n个节点,因此只有n-1条边。您的代码中循环次数为n次,这会尝试读取第n条边,但输入只有n-1条边,导致读取失败(可能使u和v的值为0或其他无效值),进而引发未定义行为。

    查询越界错误

    在查询时,你直接使用k作为索引访问lst[v].son数组。但数组索引从0开始,而输入的k通常是从1开始计数的(即k=1表示第一个儿子)。因此,当k为0或大于son数组的大小时,会导致数组越界,从而引发RE。

    另外我没看懂你的建树逻辑,太乱了(例如,将节点重复添加到节点1的son中),但根据输出示例,这部分似乎勉强工作。主要问题在于上述两点。

    注:我大概能看出这是个树结构查询系统,但是没有具体题目,我只能按照模板看,有错有质疑可指出,我会详细说明/改错

    • 1