#include <stdio.h>
#include <vector>
using namespace std;
int max(int a, int b)
{
if (a > b)
return a;
else
return b;
}
typedef struct
{
int ini, fin;
}TNodo;
TNodo nodo[1000000];
int n, q, a, b, rc, rp, res, cont, tmp;
vector< vector<int> > A(1000000);
int rangos(int pos)
{
if (nodo[pos].ini)
return 0;
nodo[pos].ini = ++cont;
int tam = A[pos].size();
if (tam > 1 || !pos)
{
while (!A[pos].empty())
{
tmp = rangos(A[pos][0]);
A[pos].erase(A[pos].begin + 1);
if (tmp > nodo[pos].fin)
nodo[pos].fin = tmp;
}
}
else
nodo[pos].fin = nodo[pos].ini;
return nodo[pos].fin;
}
int main()
{
scanf("%d %d\n", &n, &q);
for (int i = 0; i < n - 1; i++)
{
scanf("%d %d\n", &a, &b);
a--;
b--;
A[a].push_back(b);
A[b].push_back(a);
}
rangos(0);
while (q--)
{
scanf("%d %d", &a, &b);
if (q)
scanf("\n");
b--;
a--;
if ((nodo[a].fin < nodo[b].ini || nodo[a].ini > nodo[b].ini) && a != b)
res = 1;
else
res = 0;
printf("%d\n", res);
}
return 0;
}
我正在尝试解决C ++中的问题,并且由于内存限制,我必须从我的向量向量中擦除元素,但我不知道如何,我的编译器说(这是Visual Studio 2017 )我发送invalids参数,在“A [pos] .erase()”中,有两个错误C3867和C2664,那么什么是正确的方法?