有人能帮我看看空间还能优化吗
查看原帖
有人能帮我看看空间还能优化吗
1497400
jxw1楼主2025/1/28 13:15
#include<bits/stdc++.h>
using namespace std;
const int maxn=100001;
int num;bool a[maxn];
vector<int>v[maxn];
vector<bool>m[maxn-1]; 
bool dfs(int x,int f,int cnt)
{
    if(m[x][cnt])return false;
    m[x][cnt]=true;
    int res=cnt+a[x];
    if(res==num)return true;
    for(auto u:v[x])
        if(u!=f)
            if(dfs(u,x,res))return true;
    return false;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
	{
        num=0;
        bool flag=false;
        int n;
        cin>>n;
        for (int i=1;i<=n;i++)
            m[i].assign(n+1,false);
        for(int i=1;i<=n;i++)
		{
			int k;
            cin>>k;
            if(k==1)a[i]=true;
            else a[i]=false;
            if(a[i])num++;
        }
        for(int i=1;i<n;i++)
		{
            int x,y;
            cin>>x>>y;
            v[x].push_back(y);
            v[y].push_back(x);
        }
        for(int i=1;i<=n;i++)
            if(a[i])
                if(dfs(i,0,0))
				{
                    cout<<"Yes"<<endl;
                    flag=true;
                    break;
                }
        if(!flag)cout<<"No"<<endl;
        for(int i=1;i<=n;i++)
		{
            v[i].clear();
            m[i].clear();
        }
    }
    return 0;
}
2025/1/28 13:15
加载中...