QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#739488 | #7684. Sweet Sugar | rqoi031 | WA | 136ms | 5728kb | C++20 | 1.4kb | 2024-11-12 21:55:32 | 2024-11-12 21:55:34 |
Judging History
answer
#include<stdio.h>
#include<algorithm>
#include<tuple>
struct edge {
int v,next;
};
edge e[2000005];
int en,last[1000005];
inline void add_edge(const int &u,const int &v) {
e[++en]={v,last[u]},last[u]=en;
e[++en]={u,last[v]},last[v]=en;
}
int c[1000005];
inline void solve() {
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) {
scanf("%d",c+i);
}
std::fill(last+1,last+n+1,0),en=0;
for(int i=1;i<n;i++) {
int u,v;
scanf("%d%d",&u,&v);
add_edge(u,v);
}
const auto dfs([&](const auto &self,const int &u,const int &fa)->std::tuple<int,int,int,int> {
int s(0),x(c[u]),y(c[u]==1?1:1000000000),z(c[u]==1?1:0);
for(int i=last[u];i;i=e[i].next) {
const int &v(e[i].v);
if(v==fa) {
continue;
}
const auto &[s0,x0,y0,z0](self(self,v,u));
s+=s0,x+=x0;
y=std::min(y,y0);
z=std::max(z,z0);
}
if([&]()->bool {
if((x^k)&1) {
return std::max(x-y,z-1)>=k;
}
return x>=k;
}()) {
++s,x=0,y=1000000000,z=0;
}
return {s,x,y,z};
});
printf("%d\n",std::get<0>(dfs(dfs,1,0)));
}
int main() {
int t;
scanf("%d",&t);
while(t--) {
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5636kb
input:
4 7 5 1 2 1 2 2 1 2 1 2 2 3 3 4 3 5 5 6 5 7 2 2 1 0 1 2 1 1 1 1 2 1
output:
2 0 1 0
result:
ok 4 number(s): "2 0 1 0"
Test #2:
score: 0
Accepted
time: 1ms
memory: 5728kb
input:
12 1 1 0 1 1 1 1 1 2 1 2 0 1 2 1 1 2 2 1 3 0 1 3 1 1 3 2 1 2000000 0 1 2000000 1 1 2000000 2
output:
0 1 0 0 0 1 0 0 0 0 0 0
result:
ok 12 numbers
Test #3:
score: -100
Wrong Answer
time: 136ms
memory: 5700kb
input:
200000 5 2 1 1 0 0 1 2 4 5 2 4 1 3 2 5 1 0 0 0 0 0 5 1 1 2 3 2 5 4 5 3 1 0 0 0 1 1 4 4 2 3 4 5 2 5 9 1 0 0 0 2 4 3 2 1 3 1 5 1 5 3 0 1 1 0 1 5 4 2 1 4 3 5 1 5 1 0 2 1 1 1 5 3 2 4 3 4 1 4 5 1 1 0 1 1 0 1 5 4 2 1 3 5 2 5 7 0 2 1 1 2 5 1 2 3 2 5 5 4 5 5 0 1 0 1 0 2 4 4 3 5 2 1 5 5 1 0 0 1 0 1 4 1 4 5 2...
output:
1 0 0 0 1 3 3 0 0 2 0 0 2 1 0 0 1 1 0 2 0 1 0 2 1 0 0 0 0 0 1 2 0 0 2 2 0 1 0 0 0 0 3 3 0 0 1 1 2 1 2 0 4 0 1 1 0 1 0 0 1 5 0 1 1 1 0 1 1 1 1 1 2 0 1 1 1 0 3 1 0 1 0 0 4 0 0 0 1 1 0 0 1 0 2 0 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 1 1 1 2 0 1 2 0 0 2 0 0 1 0 0 0 0 0 ...
result:
wrong answer 73rd numbers differ - expected: '1', found: '2'