私题求调
  • 板块题目总版
  • 楼主流光萤影
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/10 10:09
  • 上次更新2023/11/2 21:42:21
查看原帖
私题求调
552286
流光萤影楼主2023/9/10 10:09

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\verb!TLE! 了,n<=1000n <= 1000 不应该a……

2023/9/10 10:09
加载中...