QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1173#739473#21624. 【PR #2】背包jqh333IeihonglongyinSuccess!2024-11-13 16:15:112024-11-13 16:15:16

Details

Extra Test:

Wrong Answer
time: 2ms
memory: 4980kb

input:

1
1000 30 9000 11000
210 204 172 183 222 182 224 229 210 218 222 194 173 214 176 205 183 177 192 186 223 179 176 221 212 205 211 178 196 199 181 214 197 179 180 220 168 178 213 192 172 175 228 201 205 189 229 175 210 197 230 198 227 231 208 199 185 229 168 230 227 220 196 222 205 230 180 215 214 201...

output:

0000000000000000000000000000000

result:

wrong answer 1st words differ - expected: '0000000000000000000100000000000', found: '0000000000000000000000000000000'

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#739473#21624. 【PR #2】背包Ieihonglongyin97 17ms6340kbC++141.4kb2024-11-12 21:51:532024-11-13 16:16:46

answer

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int N=1005;
int T,n,m;ll L,R,p[N],vi[N];vector<ll>f[N][55],tmp[55];vector<int>v[N];
void dfs(int u,int fa){for(int i=0;i<=m;i++)f[u][i].clear();f[u][0].push_back(0);
	for(auto i:v[u])if(i!=fa){dfs(i,u),p[u]+=p[i];for(int j=0;j<m;j++)tmp[j].clear();
		for(int a=0;a<m;a++)for(int b=0;a+b<m;b++)
			for(auto x:f[u][a])for(auto y:f[i][b])tmp[a+b].push_back(x+y);
		for(int j=0;j<m;j++){sort(tmp[j].begin(),tmp[j].end());
			tmp[j].erase(unique(tmp[j].begin(),tmp[j].end()),tmp[j].end()),f[u][j].clear();
			for(int k=0;k<min(2,(int)tmp[j].size());k++)f[u][j].push_back(tmp[j][k]);
			for(int k=max(2,(int)tmp[j].size()-2);k<tmp[j].size();k++)f[u][j].push_back(tmp[j][k]);
		}
	}
	for(int i=m-1;~i;i--)if(!f[u][i].empty()){bool fl=0;for(auto j:f[u][i])fl|=L<=p[u]-j&&p[u]-j<=R;int len=f[u][i].size();
		fl|=len>1&&L<=p[u]-f[u][i][0]&&p[u]-f[u][i][len-1]<=R&&f[u][i][1]-f[u][i][0]<=R-L&&f[u][i][len-1]-f[u][i][len-2]<=R-L;
		if(fl)f[u][i+1].push_back(p[u]);
	}
}
int main(){//freopen("tree.in","r",stdin),freopen("tree.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>T;
	while(T--){cin>>n>>m>>L>>R,m++;for(int i=1;i<=n;i++)cin>>p[i];
		for(int x,y,i=1;i<n;i++)cin>>x>>y,v[x].push_back(y),v[y].push_back(x);dfs(1,0);
		for(int i=1;i<=m;i++)cout<<(!f[1][i].empty()&&f[1][i].back()==p[1]);cout<<"\n";
		for(int i=1;i<=n;i++)v[i].clear();
	}
}