1 #include <bits/stdc++.h>
  2 using namespace std;
  3 #define rg register
  4 #define ll long long
  5 #define ld long double
  6 #define FOR(i,a,b) for(register int i=a;i<=b;++i)
  7 #define For(i,a,b) for(register int i=a;i>=b;--i)
  8 static char buf[100000],*pa(buf),*pb(buf);
  9 inline int rd();inline void wrt(int x);inline ll rdll();inline void wrtll(ll x);
 10 #define gc getchar()
 11 const ll INF=1E+17,modd=998244353,N=2E+3+10;
 12 
 13 int T,n,fa[N],mx1[N];
 14 ll a[N],t[N],f[N][N][2],bagg[N],bg[N][2],ans;
 15 vector<int> chd[N],cd[N];
 16 bool vis[N],vis1[N];
 17 
 18 void ps(int u)
 19 {
 20     vis1[u]=1;
 21     FOR(i,0,int(cd[u].size())-1)
 22     {
 23         int v=cd[u][i];
 24         if(vis1[v])
 25         {
 26             chd[v].push_back(u);
 27             fa[u]=v;
 28         }
 29         else ps(v);
 30     }
 31 }
 32 
 33 void doo(int u)
 34 {
 35     vis[u]=1;
 36     if(chd[u].size()==0)
 37     {
 38         f[u][0][1]=0;
 39         f[u][0][0]=a[u];
 40         f[u][1][0]=0;
 41         mx1[u]=1;return;
 42     }
 43     FOR(i,0,int(chd[u].size())-1)
 44     {
 45         int v=chd[u][i];
 46         if(!vis[v]) doo(v);
 47         mx1[u]+=mx1[v];
 48     }
 49     //bb1
 50     memset(bagg,3,sizeof(bagg));bagg[0]=0;
 51     FOR(i,0,int(chd[u].size())-1) For(j,mx1[u],0) 
 52     {
 53         bagg[j]=bagg[j]+f[chd[u][i]][0][0];
 54         FOR(k,1,j)
 55             bagg[j]=min(bagg[j],bagg[j-k]+f[chd[u][i]][k][0]);
 56     }
 57     FOR(i,0,mx1[u]) f[u][i][0]=min(f[u][i][0],bagg[i]);
 58     //bb2
 59     memset(bagg,3,sizeof(bagg));bagg[0]=0;
 60     FOR(i,0,int(chd[u].size())-1) For(j,mx1[u],0) 
 61     {
 62         bagg[j]=bagg[j]+min(f[chd[u][i]][0][0],f[chd[u][i]][0][1]);
 63         FOR(k,1,j)
 64             bagg[j]=min(bagg[j],bagg[j-k]+min(f[chd[u][i]][k][0],f[chd[u][i]][k][1]));
 65     }
 66     FOR(i,0,mx1[u]) f[u][i][0]=min(f[u][i][0],bagg[i]+a[u]);
 67     //bb3
 68     memset(bg,3,sizeof(bg));bg[0][0]=0;
 69     FOR(i,0,int(chd[u].size())-1) For(j,mx1[u],0) 
 70     {
 71         bg[j][1]=min(bg[j][1]+f[chd[u][i]][0][0],bg[j][0]+f[chd[u][i]][0][1]);
 72         bg[j][0]=bg[j][0]+f[chd[u][i]][0][0];
 73         FOR(k,1,j)
 74             bg[j][1]=min(bg[j][1],bg[j-k][0]+f[chd[u][i]][k][1]),
 75             bg[j][1]=min(bg[j][1],bg[j-k][1]+f[chd[u][i]][k][0]),
 76             bg[j][0]=min(bg[j][0],bg[j-k][0]+f[chd[u][i]][k][0]);
 77     }
 78     FOR(i,0,mx1[u]) f[u][i][1]=min(f[u][i][1],min(bg[i][0],bg[i][1]));
 79     return;
 80 }
 81 
 82 int main()
 83 {
 84     T=rd();while(T--){
 85     memset(f,3,sizeof(f));
 86     ans=INF;
 87     memset(mx1,0,sizeof(mx1));
 88     memset(vis,0,sizeof(vis));
 89     memset(vis1,0,sizeof(vis1));
 90     //f0
 91     n=rd();
 92     FOR(i,1,n) chd[i].clear(),cd[i].clear();
 93     //FOR(i,1,n) cout<<chd[i].size()<<" ";cout<<endl;
 94     FOR(i,1,n) a[i]=rdll();
 95     FOR(i,1,n) t[i]=rdll();
 96     FOR(i,1,n-1) 
 97     {
 98         int u=rd(),v=rd();
 99         cd[u].push_back(v);
100         cd[v].push_back(u);
101     }
102     ps(1);
103     doo(1);
104     FOR(i,0,mx1[1]) ans=min(ans,t[i]+min(f[1][i][0],f[1][i][1]));
105     cout<<ans<<endl;
106     }return 0;
107 }
108 inline int rd()
109 {
110     register int x(0);register char c(gc);bool bbb=1;
111     if(c=='-') {bbb=0;c=gc;}
112     while(c<'0'||c>'9')c=gc;
113     while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=gc;
114     if(bbb)return x;else return -x;
115 }
116 inline ll rdll()
117 {
118     register ll x(0);register char c(gc);bool bbb=1;
119     if(c=='-') {bbb=0;c=gc;}
120     while(c<'0'||c>'9')c=gc;
121     while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=gc;
122     if(bbb)return x;else return -x;
123 }

 

原文地址:http://www.cnblogs.com/universeplayer/p/16889967.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性