Submission #1135829

#TimeUsernameProblemLanguageResultExecution timeMemory
1135829DangKhoizzzzDžumbus (COCI19_dzumbus)C++20
0 / 110
54 ms1092 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pii pair <int , int>
#define ar3 array <int , 3>

using namespace std;

const int INF = 1e9 + 7;
const int maxn = 1e3 + 5;
const int maxk = 1e3 + 5;

vector <int> g[maxn];
int n , m , d[maxn] , need[maxn];
bool vis[maxn];

void bfs(int start)
{
    for(int i = 1; i <= n; i++) vis[i] = 0;

    int cursum = 0 , cnt = 0;

    priority_queue <pii , vector <pii> , greater <pii>> Q;
    Q.push({d[start] , start});

    while(!Q.empty())
    {
        int u = Q.top().se;
        Q.pop();

        if(vis[u]) continue;
        vis[u] = 1;

        cnt++;
        cursum += d[u];

        need[cnt] = min(need[cnt] , cursum);

        for(int v: g[u])
        {
            Q.push({d[v] , v});
        }
    }
}

void solve()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++) cin >> d[i];

    for(int i = 1; i <= m; i++)
    {
        int u , v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    for(int i = 1; i <= n; i++) need[i] = INF*INF;
    for(int i = 1; i <= n; i++) bfs(i);

    for(int i = n-1; i >= 1; i--)
    {
        need[i] = min(need[i] , need[i+1]);
    }

    int q; cin >> q;

    while(q--)
    {
        int s; cin >> s;
        int res = upper_bound(need + 0, need + n + 1 , s) - need - 1;

        if(res < 2) cout << 0 << '\n';
        else cout << res << '\n';
    }
}


signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...