这凭啥MLE啊||玄关
查看原帖
这凭啥MLE啊||玄关
989997
DGL__DGL楼主2024/11/8 08:58

MLE #5

#include<bits/stdc++.h>
using namespace std;
int t;
int n;
int a[214514];
int m[214514];
int h[214514],e[414514],ne[414514],idx;
int ans,inf=1e9;
struct Node
{
	int u,d;
} d[214514];

inline void add(int a,int b)
{
	idx++;
	ne[idx]=h[a];
	e[idx]=b;
	h[a]=idx;
}

void dfs(int x)
{
	int opx=0,opn=0,gen=0;
	for(int i=h[x];i;i=ne[i])
	{
		int y=e[i];
		dfs(y);
		opx=max(opx,d[y].u);
		opn=max(opn,d[y].d);
		gen++;
	}
	
	if(a[x]==-1)
	{
		if(gen==1)
		  d[x]={opx,opn};
		else if(gen>1)
		  d[x]={min(inf,opx),opn+1};  
	}
	else
	{
		if(gen==1)
		{
			if(d[x].u<opn)
			  ans=0;
			else if(d[x].d>opx)
			  ans=0;  
		}
		else if(gen>1) 
		{
			//cout<<x<<' '<<d[x].u<<' '<<opn<<' '<<opx<<'\n';
			if(d[x].u<opn+1)
			  ans=0;
			else if(d[x].d>opx+1)  
	  		ans=0; 
		} 
		   
	}
	//m[x]=max(m[x],a[x]);
	//cout<<x<<' '<<gen<<' '<<op<<' '<<m[x]<<' '<<a[x]<<'\n';
} 

int main()
{
	cin>>t;
	while(t--)
	{
		for(int i=1;i<=idx;i++) 
		  h[i]=0; 
		ans=1;idx=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
			if(a[i]==-1)
			  d[i]={inf,0};
			else
			  d[i]={a[i],a[i]};  
		}
			
		for(int i=1;i<=n-1;i++)
		{
			int a,b;
			cin>>a>>b;
			add(a,b);
		}  
		
		dfs(1);
		
		if(ans)
		  cout<<"Reasonable"<<'\n';
		else
		  cout<<"Unreasonable"<<'\n';  
	}
	
	return 0;
}
 
2024/11/8 08:58
加载中...