图论BFS

D1. The Endspeaker (Easy Version)

time limit per test

2 seconds

memory limit per test

256 megabytes

This is the easy version of this problem. The only difference is that you only need to output the minimum total cost of operations in this version. You must solve both versions to be able to hack.

You're given an array aa of length nn, and an array bb of length mm (bi>bi+1bi>bi+1 for all 1≤i<m1≤i<m). Initially, the value of kk is 11. Your aim is to make the array aa empty by performing one of these two operations repeatedly:

  • Type 11 --- If the value of kk is less than mm and the array aa is not empty, you can increase the value of kk by 11. This does not incur any cost.
  • Type 22 --- You remove a non-empty prefix of array aa, such that its sum does not exceed bkbk. This incurs a cost of m−km−k.

You need to minimize the total cost of the operations to make array aa empty. If it's impossible to do this through any sequence of operations, output −1−1. Otherwise, output the minimum total cost of the operations.

Input

Each test contains multiple test cases. The first line contains the number of test cases tt (1≤t≤10001≤t≤1000). The description of the test cases follows.

The first line of each test case contains two integers nn and mm (1≤n,m≤3⋅1051≤n,m≤3⋅105, 1≤n⋅m≤3⋅1051≤n⋅m≤3⋅105).

The second line of each test case contains nn integers a1,a2,...,ana1,a2,...,an (1≤ai≤1091≤ai≤109).

The third line of each test case contains mm integers b1,b2,...,bmb1,b2,...,bm (1≤bi≤1091≤bi≤109).

It is also guaranteed that bi>bi+1bi>bi+1 for all 1≤i<m1≤i<m.

It is guaranteed that the sum of n⋅mn⋅m over all test cases does not exceed 3⋅1053⋅105.

Output

For each test case, if it's possible to make aa empty, then output the minimum total cost of the operations.

If there is no possible sequence of operations which makes aa empty, then output a single integer −1−1.

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(x) cout << "[debug]" << " = " << x << '\n'
typedef std::pair<int,int> pii;
const int N = 15 + 5, MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const ll INFF = 0x3f3f3f3f3f3f3f3f;
int dx[] = {0, -1, 0, 1}, dy[] = {-1, 0, 1, 0};

void solve() {
    ll n;
    cin >> n;
    vector<ll> a(n+1);
    map<ll, int> visit;
    map <ll, vector<ll>> mp;
    for(ll i = 1; i <= n; i ++){
        cin >> a[i];
        ll u = a[i] + i - 1;
        ll v = u + i - 1;
        mp[u].push_back (v);
    }
    ll max = n;
    queue<ll> q;
    for(auto i: mp[n]) {
        q.push(i);
        if(i > max) max = i;
        visit[i] =1;
    }
    while (!q.empty()) {
        ll j = q.front();
        q.pop();
        for(auto i: mp[j]) {
            if(visit[i] == 0) {
                q.push(i);
                if(i > max) max = i;
                visit[i] =1;
            }
        }
    }
    cout << max << '\n';
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0); std::cout.tie(0);
    //std::cout << std::fixed << std::setprecision(2);
    int T = 1;
    std::cin >> T;
    while(T --) solve();
    return 0;
}

div2 的c题 使用数组转化成图论问题,找出节点最大值,因为其中的数值较大,使用map存储路径和访问节点,遍历时间复杂度为NlogN。

相关推荐
深念Y5 小时前
约束工程:如何让 AI 没法跑偏
人工智能·ai·软件工程·codex·opencode·ccsiwtch
赛逸会展s5 小时前
2027赛逸展机器人展新闻发布会在京举行
人工智能·机器人
月光船幽幽5 小时前
真实即粗糙,光滑是伪造
人工智能·python
智购科技自动售货机工厂5 小时前
2026自动售货机语音支付模块集成:从声纹识别到支付闭环的工程实践~YH
大数据·服务器·网络·数据库·人工智能
一次旅行5 小时前
Attention机制从数学到工程:拆解缩放点积+多头注意力|附可运行PyTorch实现与踩坑指南
人工智能·pytorch·python
不是株5 小时前
Agent Memory 架构
人工智能·agent
richard_first5 小时前
Transformer 与大语言模型:第10章 Residual (残差连接)
人工智能·深度学习·机器学习·transformer
zhongerzixunshi5 小时前
深耕绿色建材认证 赋能建筑行业低碳高质量发展
人工智能
Wang's Blog5 小时前
Vibe Coding一人即团队系列10: 在 Claude 与 Codex 中接入 DeepSeek 模型
人工智能
lisw055 小时前
计算与科学哲学(Philosophy of Computing and Science)
java·开发语言·人工智能