RE求原因
查看原帖
RE求原因
753640
封禁用户楼主2024/4/23 16:14

RE on test 13。

78行有问题(已标),求RE原因

#include<bits/stdc++.h>
#define sd std::
//#define int long long
#define inf 0x3f3f3f3f
#define linf 1e18
#define il inline
#define db double
#define ldb long double
#define F(i,a,b) for(int i=(a);i<=(b);i++)
#define f(i,a,b) for(int i=(a);i>=(b);i--)
#define MIN(x,y) (x<y?x:y)
#define MAX(x,y) (x>y?x:y)
#define me(x,y) memset(x,y,sizeof x)
#define pii sd pair<int,int>
#define umap(x,y) sd unordered_map<x,y>
#define pque(x) sd priority_queue<x>
#define X first
#define Y second
#define kg putchar(' ')
#define Fr(a) for(auto it:a)
#define dbg(x) sd cout<<#x<<": "<<x<<sd endl
il int read(){int w=1,c=0;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) c=(c<<3)+(c<<1)+ch-48;return w*c;}
void printt(int x){if(x>9) printt(x/10);putchar(x%10+48);}
il void print(int x){if(x<0) putchar('-'),printt(-x);else printt(x);}
il void put(int x){print(x);putchar('\n');}
il void printk(int x){print(x);kg;}
const int N=1e5+10;
int n,m,t,size;
struct query
{
	int l,r,k;
	int id;
}q[N];
int ans[N];
int pos[N<<1];
int num;
struct data
{
	int color,dfn,siz;
}c[N];
struct node
{
	int nex;
	int to;
}a[N<<1];
int tot,head[N];
void add(int u,int v)
{
	a[++tot].nex=head[u];
	head[u]=tot;
	a[tot].to=v;
}
void dfs(int u,int fa)
{
	c[u].dfn=++num;
	c[u].siz=1;
	for(int i=head[u];i;i=a[i].nex)
	{	
		int v=a[i].to;
		if(fa==v) continue;
		dfs(v,u);
		c[u].siz+=c[v].siz; 
	}
}
int cmp(query a,query b){return (pos[a.l]^pos[b.l])?pos[a.l]<pos[b.l]:((pos[a.l]&1)?a.r<b.r:a.r>b.r);}
int cpm(data a,data b)
{
	return a.dfn<b.dfn;
}
int cnt[N],sum[N];
void add(int x)
{
	cnt[c[x].color]++;
	sum[cnt[c[x].color]]++;
}
void del(int x)
{
	sum[cnt[c[x].color]]--;//RE原因,不理解 
	cnt[c[x].color]--;
}
il void solve()
{
	n=read(),m=read();
	t=sqrt(n);
	size=ceil((db)n/t);
	F(i,1,size) F(j,(i-1)*t+1,i*t) pos[j]=i;
	F(i,1,n) c[i].color=read();
	F(i,2,n)
	{
		int x=read(),y=read();
		add(x,y);
		add(y,x);
	}
	dfs(1,0);
	F(i,1,m)
	{
		int u=read();
		q[i].k=read();
		q[i].l=c[u].dfn;
		q[i].r=c[u].dfn+c[u].siz-1;
		q[i].id=i;
	}
	sd sort(q+1,q+1+m,cmp);
	sd sort(c+1,c+1+n,cpm);
	int l=1,r=0;
	F(i,1,m)
	{
		int ql=q[i].l,qr=q[i].r;
		while(l<ql) del(l++);
		while(l>ql) add(--l);
		while(r<qr) add(++r);
		while(r>qr) del(r--);
		ans[q[i].id]=sum[q[i].k];
	}
	F(i,1,m) put(ans[i]);
}
int main()
{
	int T=1;
//	T=read();
	while(T--) solve();
    return 0;
}
2024/4/23 16:14
加载中...