Submission #1254902

#TimeUsernameProblemLanguageResultExecution timeMemory
1254902keremDžumbus (COCI19_dzumbus)C++20
0 / 110
17 ms16192 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fr first #define sc second #define pb push_back #define all(x) x.begin(),x.end() #define sp << " " << #define inf 1e15 #define N 1000 mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef tuple<int,int,int> tiii; typedef pair<int,int> pii; int n,m,q,cost[N+5],sz[N+5],vis[N+5],dp[N+5][N+5][2]; vector<int> g[N+5]; void init(int x,int ata){ vis[x]=1; for(auto u:g[x]) if(u!=ata) init(u,x); } void dfs(int x,int ata){ sz[x]=1; dp[x][0][0]=0; dp[x][1][1]=cost[x]; for(auto u:g[x]){ if(u==ata) continue; dfs(u,x); for(int i=sz[x];i>=0;i--){ for(int j=1;i+j<=n && j<=sz[u];j++){ if(j!=1) dp[x][i+j][0]=min(dp[x][i+j][0],dp[x][i][0]+min(dp[u][j][0],dp[u][j][1])); if(i!=1) dp[x][i+j][1]=min(dp[x][i+j][1],dp[x][i][1]+dp[u][j][0]); dp[x][i+j][1]=min(dp[x][i+j][1],dp[x][i][1]+dp[u][j][1]); } } sz[x]+=sz[u]; } } void solve(){ cin >> n >> m; for(int i=1;i<=n;i++) cin >> cost[i]; for(int i=0;i<m;i++){ int x,y; cin >> x >> y; g[x].pb(y); g[y].pb(x); } for(int i=0;i<n+5;i++) for(int j=0;j<n+5;j++) dp[i][j][0]=dp[i][j][1]=inf; for(int i=1;i<=n;i++){ if(!vis[i]){ g[0].pb(i); init(i,0); } } dfs(0,0); vector<int> ans; for(int i=2;i<=n;i++) ans.pb(dp[0][i][0]); cin >> q; while(q--){ int x; cin >> x; int t=upper_bound(all(ans),x)-ans.begin()-1; if(t<0) cout << 0 << "\n"; else cout << t+2 << "\n"; } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); int test=1; //~ cin >> test; while(test--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...