Advertisement
Mysakure

Untitled

Oct 21st, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. /**
  2.  *    author:  MySakure
  3.  *    created: 21.10.2019 11:22:49      
  4. **/
  5. #include<bits/stdc++.h>
  6. using namespace std;
  7. #define int long long
  8. const int maxn=1e6+10;
  9. const int inf=1e18;
  10. int dp[maxn][2],t,n,v[maxn],ans;
  11. vector<int>g[maxn];
  12.  
  13. //0 最大值
  14. //1 最小值
  15. void dfs(int u,int fa){
  16.     dp[u][0]=min(dp[u][0],1-v[u]);
  17.     dp[u][1]=min(dp[u][1],1+v[u]);
  18.     for(int i=0;i<signed(g[u].size());++i){
  19.         int v=g[u][i];
  20.         if(v==fa)continue;
  21.         dfs(v,u);
  22.         ans=min(ans,dp[v][0]+dp[u][1]);
  23.         ans=min(ans,dp[v][1]+dp[u][0]);
  24.         dp[u][0]=min(dp[u][0],dp[v][0]+1);
  25.         dp[u][1]=min(dp[u][1],dp[v][1]+1);
  26.     }
  27. }
  28. signed main() {
  29.     ios::sync_with_stdio(false);
  30.     cin.tie(NULL);
  31. #ifdef mysakure
  32.     freopen("in1.txt","r",stdin);
  33.     freopen("ans1.txt","w",stdout);
  34. #endif
  35.     cin>>t;
  36.     while(t--){
  37.         cerr<<"debg "<<endl;
  38.         cin>>n;
  39.         for(int i=1;i<=n;++i)cin>>v[i];
  40.         for(int i=1;i<=n;++i)g[i].clear();
  41.         for(int i=1;i<n;++i){
  42.             int a,b;
  43.             cin>>a>>b;
  44.             g[a].push_back(b);
  45.             g[b].push_back(a);
  46.         }
  47.         for(int i=1;i<=n;++i){
  48.             dp[i][1]=dp[i][0]=inf;
  49.         }
  50.         ans=1;
  51.         dfs(1,-1);
  52.         cout<<ans<<endl;
  53.     }
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement