0分求调,目标60
查看原帖
0分求调,目标60
537459
villagehero楼主2025/7/29 17:04
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+2;
int n,m,b[N],p,x,u,i,y,q,vis[N],d,f[N],add[N];
vector<int>a[N];
void dfs(int u)
{
	vis[u]=1;
	for(int i=0;i<a[u].size();i++)
	{
		if(vis[a[u][i]]!=1)
		{
			dfs(a[u][i]);
		}
	}
	return;
}
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>b[i];
//		cout<<"b["<<i<<"]:"<<b[i]<<endl;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>u>>i;
//		cout<<"u:"<<u<<" "<<"i:"<<i<<endl;
		f[i]=u;
//		s[u]=i;
//		ss[u]++;
//		c[u][u]=1;
//		c[u][i]=1;
//		c[i][u]=1;
		a[u].push_back(i);
//		a[i].push_back(u);
	}
	cin>>m;
//	cout<<"m:"<<m<<endl;
	for(int i=1;i<=m;i++)
	{
		cin>>p>>x>>y;
//		cout<<"p:"<<p<<"x:"<<x<<"y:"<<y<<endl;
		if(p==1)
		{
//			int cnt=0;
			memset(vis,0,sizeof(vis));
			dfs(x);
			for(int j=n;j>=1;j--)
			{
				if(vis[j]==1)
				{
//					cout<<"p==1:"<<j<<endl;
					add[j]+=y;
				}
			}
		}
		else if(p==2)
		{
			add[f[x]]+=y;
//			cout<<"p==2:"<<x<<endl;
//			cout<<"p==2:"<<f[x]<<endl;
			add[x]+=y;
			for(int i=x;i<=n;i++)
			{
				if(f[i]==x)
				{
					cout<<"p==2:"<<i<<endl;
					add[i]+=y;
				}
			}
		}
	}
	cin>>q;
//	cout<<"q:"<<q<<endl;
	for(int i=1;i<=q;i++)
	{
		cin>>d;
//		cout<<"d:"<<d<<endl;
//		cout<<"b["<<d<<"]+add["<<d<<"]:";
		cout<<b[d]+add[d]<<endl;
//		"b["<<d<<"]+add["<<d<<"]:"
	}
	return 0;
}
2025/7/29 17:04
加载中...