图论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。

相关推荐
majingming1232 小时前
FUNCTION
java·前端·javascript
腾讯蓝鲸智云3 小时前
嘉为蓝鲸可观测系列产品入选Gartner《中国智能IT监控与日志分析工具市场指南》
运维·人工智能·信息可视化·自动化
A_nanda3 小时前
Vue项目升级
前端·vue3·vue2
LaughingZhu3 小时前
Product Hunt 每日热榜 | 2026-03-25
人工智能·经验分享·深度学习·神经网络·产品运营
SuperEugene3 小时前
Axios 接口请求规范实战:请求参数 / 响应处理 / 异常兜底,避坑中后台 API 调用混乱|API 与异步请求规范篇
开发语言·前端·javascript·vue.js·前端框架·axios
Fly Wine3 小时前
Leetcode之有效字母异位词
算法·leetcode·职场和发展
蟑螂恶霸3 小时前
Windows安装OpenCV 4.8
人工智能·windows·opencv
枫叶林FYL3 小时前
【自然语言处理 NLP】第二章 经典NLP算法与特征工程(Classical NLP Algorithms)
人工智能·深度学习·机器学习
非著名程序员3 小时前
阿里云重磅上线 Qoder 专家团模式,AI 编程进入组团作战时代
人工智能
abigale033 小时前
【浏览器 API / 网络请求 / 文件处理】前端文件上传全流程:从基础上传到断点续传
前端·typescript·文件上传·vue cli