Dev-C++ 特性?
  • 板块学术版
  • 楼主ShanQing
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/7/22 15:11
  • 上次更新2023/11/3 08:15:34
查看原帖
Dev-C++ 特性?
368204
ShanQing楼主2023/7/22 15:11

一份正常的代码(打的什么题不用管)

//writer:Oier_szc

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5,M=2e6+5;
int n,q;
int a[N];
int head[N],ne[N<<1],to[N<<1],tot=0;
void add(int u,int v)
{
	to[++tot]=v;
	ne[tot]=head[u];
	head[u]=tot;
}
bool st[M];
int primes[N],len=0;
void xxs()
{
	for(int i=2;i<=2e6;++i)
	{
		if(!st[i])
		{
			primes[++len]=i;
		}
		for(int j=1;j<=len&&primes[j]<=2e6/i;++j)
		{
			st[i*primes[j]]=true;
			if(i%primes[j]==0) break;
		}
	}
}
stack<int> stk[N];
int id[N],swap_id[N],timec=0,ans[N];
vector<int> fj[N];
void init()
{
	for(int i=1;i<=n;++i)
	{
		for(int j=1;primes[j]<=a[i]/primes[j];++j)
		{
			if(a[i]%primes[j]==0) fj[i].push_back(j);
			while(a[i]%primes[j]==0)
			{
				a[i]/=primes[j];
			} 
		}
	}
}
void init2(int u)
{
	//printf("%d\n",timec); //输出timec初始值的地方 
	id[u]=++timec;
	swap_id[timec]=u;
	for(int i=head[u];i;i=ne[i])
	{
		init2(to[i]);
	}
}
void dfs(int u)
{
	int maxn=-1;
	for(int i=0;i<fj[u].size();++i)
	{
		if(!stk[fj[u][i]].empty()) maxn=max(maxn,stk[fj[u][i]].top());
		stk[fj[u][i]].push(id[u]);
	}
	ans[u]=maxn;
	for(int i=head[u];i;i=ne[i])
	{
		dfs(to[i]); 
	}
	for(int i=0;i<fj[u].size();++i)
	{
		stk[fj[u][i]].pop();
	}
}
signed main()
{
	xxs();
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&a[i]);
	}
	int u,v;
	for(int i=1;i<=n-1;++i)
	{
		scanf("%d%d",&u,&v);
		add(u,v);
	}
	init();
	init2(1);
	dfs(1);
	int x;
	while(q--)
	{
		scanf("%d",&x);
		printf("%d\n",swap_id[ans[x]]);
	}
	return 0;
}

此代码玄学RE,发现timec变成了奇怪的数。但是timec已初始化0。

将

int id[N],swap_id[N],timec=0,ans[N];

改为

int id[N],swap_id[N],ans[N],timec=0;

timec就变成0了。

求原因。如果这是个很常识的问题就请嘲讽这个蒟蒻。

2023/7/22 15:11
加载中...