제출 #1299296

#제출 시각아이디문제언어결과실행 시간메모리
1299296aarb_.tomatexdDžumbus (COCI19_dzumbus)C++20
20 / 110
3 ms572 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define pb push_back
const int inf = 1e8;
const int maxn = 1e3+5;
const int maxq = 2e5+10;
int n,m,q;
int dp[maxn][2][2];
vector<ll>d(maxn);
vector<int>adj[maxn];

int main(){
    ios::sync_with_stdio(0); cin.tie(0);
    cin >> n >> m;
    for(int i=0;i<n;i++) cin >> d[i];
    for(int i=0;i<m;i++){
        int a,b; cin >> a >> b;
        a--, b--;
        adj[a].pb(b);
        adj[b].pb(a);
    }
    int x = -1, px = -1;
    for(int i=0;i<n;i++){
        if(adj[i].size()==1){
            px = i;
            x = adj[i][0];
            break;
        }
    }
    for(int i=0;i<maxn;i++)
            dp[i][1][0] = -inf;
    while(true){
        for(int i=0;i<maxn;i++){
            dp[i][0][1] = max(dp[i][0][0], dp[i][1][0]);
            dp[i][1][1] = -inf;
            if(d[x]<=i) dp[i][1][1] = dp[i-d[x]][1][0] + 1;
            if(d[x] + d[px]<=i){
                dp[i][1][1] = max(dp[i][1][1],dp[i-d[x]-d[px]][0][0]+2);
            }
        }
        for(int i=0;i<maxn;i++){
            dp[i][0][0] = dp[i][0][1];
            dp[i][1][0] = dp[i][1][1];
        }
        if(adj[x].size() == 1)break;
        int tmp = adj[x][0] + adj[x][1] - px;
        px = x;
        x = tmp;
    }
    cin >> q;
    while(q--){
        int s; cin >> s;
        cout<<max(dp[s][0][0], dp[s][1][0])<<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...