ABC E求调
  • 板块灌水区
  • 楼主Xiphi
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/7/8 21:45
  • 上次更新2023/11/3 10:59:28
查看原帖
ABC E求调
667250
Xiphi楼主2023/7/8 21:45
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<string>
#include<cmath>
#include<set>
using namespace std;
int n,m;
vector<int> Adj[300005];
bool vis[300005];
set<int,greater<int> > q[300005];
void dfs(int x,int dep,int fa){
	if(*q[x].begin()>=1) vis[x]=1;
	for(int i=0;i<Adj[x].size();++i){
		int v=Adj[x][i],XX;
		if(q[x].size()!=0) XX=dep+*q[x].begin();
		else XX=dep;
		if(fa!=v&&XX!=0){
			vis[v]=1;
			dfs(v,XX-1,x);
		}
	}
}
int main(){
	cin>>n>>m;
	int flag=0;
	for(int i=2;i<=n;++i){
		int x;
		cin>>x;
		if(x==1) flag=1;
		Adj[x].push_back(i);
	}
	for(int i=1;i<=m;++i){
		int x,y;
		cin>>x>>y;
		q[x].insert(y);
	}
	if(flag!=1){
//		cout<<'!';
		while(1){
			int x;	
		}
	} 
	dfs(1,0,0);
	int cnt=0;
	for(int i=1;i<=n;++i){
		cnt+=vis[i];
	}
	cout<<cnt;
	return 0;
}
2023/7/8 21:45
加载中...