https://www.luogu.com.cn/problem/T349775
#include<bits/stdc++.h>
using namespace std;
int n,m,op,x,y,k,tree[1005],pos[1005];
int lowbit(int num){return num&-num;}
void add(int now,int num)
{
while(now <= n) tree[now] += num,now += lowbit(now);
return;
}
int find(int now)
{
if(now) return find(now-lowbit(now)) + tree[now];
return 0;
}
vector<int> d[1005];
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> n >> m;
for(register int i(1);i < n;++i) cin >> x >> y,d[x].emplace_back(y),d[y].emplace_back(x);
register int tmp = 1;
for(;tmp <= n;++tmp) if(d[tmp].size() == 1) break;
for(register int num(1);num <= n;) pos[tmp] = num,tmp = (pos[d[tmp].back()]?d[tmp].front():d[tmp].back()),++num;
for(;m;--m)
{
cin >> op >> x;
if(op == 1) cin >> y,add(min(pos[x],pos[y]),1),add(max(pos[x],pos[y])+1,-1);
else cout << find(pos[x]) << "\n";
}
}
写了一个树状数组,样例过了
全 TLE 了,n<=1000 不应该a……