/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 540.0 KiB
#2 Wrong Answer 2ms 328.0 KiB
#3 Wrong Answer 2ms 492.0 KiB
#4 Wrong Answer 5ms 600.0 KiB
#5 Wrong Answer 50ms 2.836 MiB
#6 Wrong Answer 100ms 3.098 MiB
#7 Wrong Answer 67ms 3.215 MiB
#8 Wrong Answer 41ms 592.0 KiB
#9 Wrong Answer 99ms 820.0 KiB
#10 Wrong Answer 117ms 3.078 MiB
#11 Wrong Answer 81ms 3.27 MiB
#12 Wrong Answer 97ms 3.098 MiB
#13 Wrong Answer 36ms 3.316 MiB
#14 Wrong Answer 130ms 3.164 MiB
#15 Wrong Answer 60ms 796.0 KiB
#16 Wrong Answer 30ms 3.02 MiB
#17 Wrong Answer 29ms 2.992 MiB
#18 Wrong Answer 29ms 3.02 MiB
#19 Accepted 146ms 18.848 MiB
#20 Accepted 144ms 18.715 MiB
#21 Accepted 150ms 18.719 MiB
#22 Accepted 192ms 35.523 MiB
#23 Wrong Answer 242ms 18.508 MiB
#24 Wrong Answer 246ms 18.348 MiB
#25 Wrong Answer 176ms 18.773 MiB
#26 Wrong Answer 14ms 1.691 MiB

Code

#include<bits/stdc++.h>
using namespace std;
using ll=long long int;

void fastio(){ios::sync_with_stdio(false);cin.tie(0);}

vector<ll> take_inputs_0(ll n){vector<ll> v(n);for(int i=0;i<n;i++){cin>>v[i];}return v;}
vector<ll> take_inputs_1(ll n){vector<ll> v(n);for(int i=1;i<n;i++){cin>>v[i];}return v;}

void show(auto x){ cout<<x<<"\n";}
void show1(auto v){ ll n=(signed)v.size();for(int i=0;i<n;i++){cout<<v[i]<<" ";}cout<<"\n";}
void show2(auto v){ ll n=(signed)v.size();for(int i=0;i<n;i++){	cout<<v[i]<<"\n";}}

void sort_it(auto &v){ sort(v.begin(),v.end());}
void reverse_it(auto &v){ reverse(v.begin(),v.end());}
void do_both(auto &v){ sort(v.begin(),v.end());reverse(v.begin(),v.end());}

auto find_max(auto v){ sort(v.begin(),v.end());reverse(v.begin(),v.end());return v[0];}
auto find_min(auto v){ sort(v.begin(),v.end());return v[0];}

vector<ll> bitRep64(ll n){vector<ll> v;int i=0;while(i<=63){if(n&(1LL<<i)){v.push_back(1);}else{v.push_back(0);}i++;}return v;}
vector<ll> bitRep32(ll n){vector<ll> v;int i=0;while(i<=31){if(n&(1LL<<i)){v.push_back(1);}else{v.push_back(0);}i++;}return v;}
vector<string> all_subset(ll n){vector<string> v;for(int i=0;i<(1<<n);i++){string st="";for(int j=0;j<n;j++){if(i&(1<<j)){st+="1";}else{st+="0";}}v.push_back(st);}return v;}

vector<ll> prefix_sum_0(vector<ll> v){ll n=(signed)v.size();for(int i=1;i<n;i++){v[i]=v[i-1]+v[i];}return v;}
vector<ll> prefix_sum_1(vector<ll> v){ll n=(signed)v.size();vector<ll> summ(n+1);for(int i=1;i<=n;i++){summ[i]=summ[i-1]+v[i-1];}return summ;}

///////////////////////////////////

ll ans=0;
ll n;
ll done=0;

ll res=0;
void dfs(ll node,vector<ll> adj[],ll visited[],ll cnt[],ll restricted[])
{
	visited[node]=1;
	
	ll countt=0;
	
	for(auto x:adj[node])
	{
		if(!visited[x])
		{
			if(cnt[x]>=1){countt++;}
			cnt[node]+=cnt[x];
			//cnt[node]+=countt+1;
			dfs(x,adj,visited,cnt,restricted);
			countt+=cnt[x];
		}
	}
	
//	cout<<node<<" "<<cnt[node]<<"\n";
	cnt[node]+=countt;
	
	if(cnt[node]==0)
	{
		restricted[node]=1;
	}
}

void dfs2(ll node,vector<ll> adj[],ll visited[],ll cnt[],ll restricted[])
{
	visited[node]=1;

	for(auto x:adj[node])
	{
		if(!visited[x] && restricted[x]==0)
		{
			cnt[x]=cnt[node]+1;
			dfs2(x,adj,visited,cnt,restricted);
		}
	}
}


int main()
{
	int t;cin>>t;
	
	while(t--)
	{
		cin>>n;
		
		vector<ll> v(n+1);
		
		ll visited[n+1];
		ll cnt[n+1];
		
        ll restricted[n+1];
        
        ans=0;
        done=0;
        res=0;
		for(int i=1;i<=n;i++)
		{
			cin>>v[i];
			visited[i]=0;
			restricted[i]=0;
			cnt[i]=v[i];
		}
		
		vector<ll> adj[n+1];
		
		for(int i=0;i<n-1;i++)
		{
			ll x,y;cin>>x>>y;
			
			adj[x].push_back(y);
			adj[y].push_back(x);
		}
		
		ll node=-1;
		ll sz=1e18;
		
		
		for(int i=1;i<=n;i++)
		{
			if(v[i]==1 && sz>adj[i].size())
			{
				node=i;
				sz=adj[i].size();
			}
		}
		
		if(node==-1)
		{
			show(0);
			continue;
		}
		
		
		dfs(node,adj,visited,cnt,restricted);
		
		
		for(int i=1;i<=n;i++)
		{
			visited[i]=0;
			cnt[i]=0;
			
		}
		
		ll dem=0;
		
		for(int i=1;i<=n;i++)
		{
			
			if(restricted[i]==1){dem++;}
		
		}
		
		n=n-dem;
		
		dfs2(node,adj,visited,cnt,restricted);
		
		ll temp=-1e18;
		
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]>temp){temp=cnt[i];}
		}
		
		
		show((2*(n-1))-temp);
		
		
	}
	
	return 0;
}

Information

Submit By
Type
Submission
Problem
P1078 Apple on Tree
Language
C++17 (G++ 13.2.0)
Submit At
2024-08-16 21:28:55
Judged At
2024-08-16 21:28:55
Judged By
Score
25
Total Time
246ms
Peak Memory
35.523 MiB