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

相关推荐
静心问道2 分钟前
CPO:对比偏好优化—突破大型语言模型在机器翻译中的性能边界
人工智能·强化学习·ai技术应用
liliangcsdn2 分钟前
mac mlx大模型框架的安装和使用
java·前端·人工智能·python·macos
CssHero5 分钟前
基于vue3完成领域模型架构建设
前端
PanZonghui8 分钟前
用项目说话:我的React博客构建成果与经验复盘
前端·react.js·typescript
言兴11 分钟前
教你如何理解useContext加上useReducer
前端·javascript·面试
sunbyte15 分钟前
50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GoodCheapFast(Good - Cheap - Fast三选二开关)
前端·javascript·css·vue.js·tailwindcss
前端的日常16 分钟前
网页视频录制新技巧,代码实现超简单!
前端
前端的日常18 分钟前
什么是 TypeScript 中的泛型?请给出一个使用泛型的示例。
前端
今禾19 分钟前
一行代码引发的血案:new Array(5) 到底发生了什么?
前端·javascript·算法
倔强青铜三22 分钟前
苦练Python第25天:玩转字典
人工智能·python·面试