#include<bits/stdc++.h>
using namespace std;
int n,m,c,w[100100],head[100100],f[100100][2],ct[100100],fa[100100],dp[100100],mf[100100][2];
char type[10];
struct Edge{
int to,nxt;
}e[200200];
queue<int>change;
void read()
{
int m1,m2;
cin>>n>>m>>type;
for(int i=1;i<=n;i++)scanf("%d",&w[i]);
for(int i=1;i<n;i++)
{
scanf("%d%d",&m1,&m2);
e[++c].to=m2;
e[c].nxt=head[m1];
head[m1]=c;
e[++c].to=m1;
e[c].nxt=head[m2];
head[m2]=c;
}
}
void init(int k)
{
int m=0x7fffffff,p;
ct[k]=1;
f[k][1]=w[k];
dp[k]=dp[fa[k]]+1;
for(int i=head[k];i;i=e[i].nxt)
{
if(e[i].to==fa[k])continue;
fa[e[i].to]=k;
init(e[i].to);
ct[k]+=ct[e[i].to];
f[k][1]+=min(f[e[i].to][0],f[e[i].to][1]);
if(f[e[i].to][1]<m)
{
m=f[e[i].to][1];
p=e[i].to;
}
if(f[e[i].to][1]<=f[e[i].to][0] || ct[e[i].to]==1)
{
m=0;
f[k][0]+=f[e[i].to][1];
}
else f[k][0]+=f[e[i].to][0];
}
if(m && m!=0x7fffffff)f[k][0]=f[k][0]-f[p][0]+f[p][1];
}
void update(int k)
{
int m=0x7fffffff,p;
change.push(k);
f[k][1]=w[k];
f[k][0]=0;
for(int i=head[k];i;i=e[i].nxt)
{
if(e[i].to==fa[k])continue;
f[k][1]+=min(f[e[i].to][0],f[e[i].to][1]);
if(f[e[i].to][1]<m)
{
m=f[e[i].to][1];
p=e[i].to;
}
if(f[e[i].to][1]<=f[e[i].to][0] || ct[e[i].to]==1)
{
m=0;
f[k][0]+=f[e[i].to][1];
}
else f[k][0]+=f[e[i].to][0];
}
if(m && m!=0x7fffffff)f[k][0]=f[k][0]-f[p][0]+f[p][1];
//printf("%d#%d %d\n",k,f[k][0],f[k][1]);
}
void solve()
{
int m1,m2,m3,m4,mm=-1;
for(int i=0;i<m;i++)
{
scanf("%d%d%d%d",&m1,&m2,&m3,&m4);
mm=-1;
if(m1==1)mm=m2;
else if(m3==1)mm=m4;
change.push(m1);
f[m1][!m2]=0x3f3f3f3f;
change.push(m3);
f[m3][!m4]=0x3f3f3f3f;
if(dp[m3]>dp[m1])swap(m1,m3),swap(m2,m4);
if(dp[m1]>dp[m3])
{
while(dp[m1]>dp[m3])update(fa[m1]),m1=fa[m1];
}
while(m1!=m3)
{
update(fa[m1]);
update(fa[m3]);
m1=fa[m1];
m3=fa[m3];
}
while(m1)update(fa[m1]),m1=fa[m1];
if(mm!=-1)printf("%d\n",f[1][mm]<0x3f3f3f3f?f[1][mm]:-1);
else printf("%d\n",min(f[1][0],f[1][1])<0x3f3f3f3f?min(f[1][0],f[1][1]):-1);
while(!change.empty())
{
mm=change.front();change.pop();
f[mm][0]=mf[mm][0];
f[mm][1]=mf[mm][1];
}
}
}
int main()
{
read();
init(1);
//for(int i=1;i<=n;i++)printf("%d#%d %d\n",i,f[i][0],f[i][1]);
memcpy(mf,f,sizeof(f));
solve();
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 194.78 us | 844 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #2 | 199.96 us | 844 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #3 | 203.31 us | 844 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #4 | 189.73 us | 844 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #5 | 300.43 us | 856 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #6 | 307.78 us | 856 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #7 | 279.23 us | 848 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #8 | 36.447 ms | 1 MB + 92 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #9 | 35.361 ms | 1 MB + 92 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #10 | 18.858 ms | 1020 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #11 | 19.037 ms | 1020 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #12 | 2 s | 13 MB + 52 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #13 | 2 s | 13 MB + 52 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #14 | 2 s | 13 MB + 52 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #15 | 2 s | 13 MB + 52 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #16 | 2 s | 13 MB + 52 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #17 | 2 s | 13 MB + 48 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #18 | 2 s | 5 MB + 92 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #19 | 2 s | 5 MB + 92 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #20 | 2 s | 8 MB + 648 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #21 | 2 s | 8 MB + 648 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #22 | 2 s | 8 MB + 648 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #23 | 2 s | 8 MB + 644 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #24 | 2 s | 8 MB + 648 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #25 | 2 s | 8 MB + 660 KB | Time Limit Exceeded | Score: 0 | 显示更多 |