求助
查看原帖
求助
373819
lizichang楼主2021/10/10 20:32
#include<bits/stdc++.h>
#include<algorithm>
#include<vector>
using namespace std;
const int N=100005;
const int M=998244353;
int tag=1,n,m;
int plu[N][2],mul[N]; 
int a[N],t[N];
vector<int> v[N];
void addition(int q)
{
	if(tag!=1)
	{
		tag=(tag%M);
		for(int i=1;i<=n;i++)	a[i]=(a[i]*tag)%M;
		tag=1;
	}
	a[plu[q][0]]+=plu[q][1];
}
void recursion(int q)
{
	int y;
	//cout<<v[q].size()<<endl;
	for(int i=0;i<v[q].size();i++)
	{
		y=v[q][i];
		//cout<<y<<endl;
		if(t[y]==1)	addition(y);
		else if(t[y]==2)	tag=(tag*mul[y])%M;
		else	recursion(y);
	}
}
int main()
{
	int x,y;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)	scanf("%d",&a[i]);;
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&t[i]);
		if(t[i]==1)
		{
			scanf("%d%d",&x,&y);
			plu[i][0]=x,plu[i][1]=y;
		}
		else if(t[i]==2)
		{
			scanf("%d",&x);
			mul[i]=x;
		}
		else
		{
			scanf("%d",&x);
			for(int j=1;j<=x;j++)
			{
				scanf("%d",&y);
				v[i].push_back(y);
				//cout<<v[i].size()<<endl;
			}
		}
	}
	scanf("%d",&x);
	while(x--)
	{
		scanf("%d",&y);
		if(t[y]==1)	addition(y);
		else if(t[y]==2)	tag=(tag*mul[y])%M;
		else	recursion(y);
		//for(int i=1;i<=n;i++)	cout<<a[i]<<' ';
	}
	if(tag!=1)
	{ 
		tag=(tag%M);
		for(int i=1;i<=n;i++)	a[i]=(a[i]*tag)%M;
		tag=1;
	}
	for(int i=1;i<=n;i++)	cout<<a[i]<<' ';
	return 0;
}
2021/10/10 20:32
加载中...