蓝桥杯-02-2023蓝桥杯c/c++省赛B组题目

news2024/11/20 7:00:12

参考

2023 年第十四届蓝桥杯 C/C++ B组省赛题解
2023蓝桥杯c/c++省赛B组题目(最全版):

A:日期统计

在这里插入图片描述

这题方法应该很多,没有和别人讨论想法。我的解法思路是:先 load 函数生成所有这一年的合法日期,然后枚举所有可以从数据中拿到的八位日期,检查它是否在合法日期的集合中。

这里枚举到四位,即年份的时候要判断一下,不然可能数据太多要跑很久。

注意要去重!不知道有多少冤大头痛失这 5 分。(原题里特意加粗了不重复)

// 日期统计
#include <bits/stdc++.h>
#define int int64_t
#define endl '\n'
using namespace std;
const int MAX = 1e5+5;
const int INF = 0x3f3f3f3f3f3f3f3fll;
const int MOD = 1e9+7;

// 235

set<int> S;  // 记录一年中合法的日期
set<int> M;  // 记录出现的日期,自带去重

// 生成数据
int mon[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void load() {
    for (int i = 1; i <= 12; i++) {
        for (int j = 1; j <= mon[i-1]; j++) {
            S.insert(2023 * 10000 + i * 100 + j);
        }
    }
}

void solve() {
    const int n = 100;
    int a[256];
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < n; i++) {
        cout << a[i] << ' ';
    }
    cout << endl;
    for (int _1 = 0; _1 < n; _1++) {
        for (int _2 = _1 + 1; _2 < n; _2++) {
            for (int _3 = _2 + 1; _3 < n; _3++) {
                for (int _4 = _3 + 1; _4 < n; _4++) {
                    int x = 0;
                    x = x * 10 + a[_1];
                    x = x * 10 + a[_2];
                    x = x * 10 + a[_3];
                    x = x * 10 + a[_4];
                    if (x != 2023) continue;  // 这里先判断一下合法,否则程序可能跑不动
                    for (int _5 = _4 + 1; _5 < n; _5++) {
                        for (int _6 = _5 + 1; _6 < n; _6++) {
                            for (int _7 = _6 + 1; _7 < n; _7++) {
                                for (int _8 = _7 + 1; _8 < n; _8++) {
                                    int x = 0;
                                    x = x * 10 + a[_1];
                                    x = x * 10 + a[_2];
                                    x = x * 10 + a[_3];
                                    x = x * 10 + a[_4];
                                    x = x * 10 + a[_5];
                                    x = x * 10 + a[_6];
                                    x = x * 10 + a[_7];
                                    x = x * 10 + a[_8];
                                    // 如果这个日期是这年的合法日期
                                    if (S.count(x)) {
                                        M.insert(x);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    cout << M.size() << endl;
}

int32_t main() {
    // 该文件是复制下来的题目给的数据
    freopen("A.txt", "r", stdin);

    load();
    cout << S.size() << endl;
    solve();

    return 0;
}

B: 01 串的熵

在这里插入图片描述
在这里插入图片描述

用Excel做比较方便,让我看看有谁?哈哈哈哈哈
在这里插入图片描述

答案当然就是 11027421了!!!!!

C: 冶炼金属

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 冶炼金属
#include <bits/stdc++.h>
#define int int64_t
#define endl '\n'
using namespace std;
const int MAX = 1e5 + 5;
const int INF = 0x3f3f3f3f3f3f3f3fll;
const int MOD = 1e9 + 7;

void solve() {
    int n;
    cin >> n;
    int min_ = -INF - 1, max_ = INF;
    for (int i = 0; i < n; i++) {
        int x, y;
        cin >> x >> y;
        min_ = max(min_, x / (y + 1) + 1);  // 求左边界的并
        max_ = min(max_, x / y);            // 求右边界的并
    }
    cout << min_ << " " << max_ << endl;
}

int32_t main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    solve();

    return 0;
}
#include <iostream>
using namespace std;
#include<cstdio>
int main(){
	long long n,a,b,t,t1;
	long long max=0,min=9999999999;
	cin >> n;
	for(int i = 0;i <n;i++){
		cin >> a >> b;
		t=a/b;
		if(t <= min){
			min = t;
		}
		t1 = a/(b+1); 
		if(t1 >= max){
			max = t1;
		}
	}
	printf("%lld %lld",max+1,min);
	return 0;
}

在这里插入图片描述

D: 飞机降落

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

// 飞机降落
#include <bits/stdc++.h>
#define int int64_t
#define endl '\n'
using namespace std;
const int MAX = 15;
const int INF = 0x3f3f3f3f3f3f3f3fll;
const int MOD = 1e9+7;

struct Air {
    // 最早降落时间, 最迟降落时间, 降落过程耗时
    int st, ed, len;
} air[MAX];

int n;
bool vis[MAX];
bool dfs(int x, int pos) {
    if (x >= n) return true;
    for (int i = 0; i < n; i++) {
        // 如果 i 没有用过,且 i 最迟降落时间在前者的完成这个降落流程之后
        if (not vis[i] and pos <= air[i].ed) {  
            vis[i] = true;
            // 在条件允许的情况下后者尽早降落为后者提供,要两类讨论,这里算有一点点贪心
            bool tmp = dfs(x+1, max(air[i].st, pos) + air[i].len);  
            vis[i] = false;
            if (tmp) return true;
        }
    }
    return false;
}

void solve() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> air[i].st >> air[i].ed >> air[i].len;
        air[i].ed += air[i].st;
    }
    bool res = dfs(0, 0);
    if (res) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
}

int32_t main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    int t;
    cin >> t;
    while (t--)
        solve();

    return 0;
}

E: 接龙数列

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

// 接龙序列
#include <bits/stdc++.h>
#define int int64_t
#define endl '\n'
using namespace std;

int res[10] = {0};

void solve() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        int tail = x % 10;  // 计算末尾
        int head;
        while (x) {
            head = x % 10;
            x /= 10;
        }  // 计算首位
        res[tail] = max(res[tail], res[head] + 1);  // 状态转移方程
    }
    int max_ = 0;
    for (int i = 0; i < 10; i++) {
        max_ = max(max_, res[i]);  // 获取最长接龙序列
    } 
    cout << n - max_ << endl;
}

int32_t main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    solve();

    return 0;
}

F: 岛屿个数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

// 岛屿个数
#include <bits/stdc++.h>
#define int int64_t
#define endl '\n'
using namespace std;
const int MAX = 55;
const int INF = 0x3f3f3f3f3f3f3f3fll;
const int MOD = 1e9 + 7;

char map_[MAX][MAX];              // 地图
bool track[MAX][MAX] = {false};   // 访问标记
bool outsea[MAX][MAX] = {false};  // 外海标记
struct XY {
    int x, y;
} nxt[] = {
    {1, 0},
    {-1, 0},
    {0, 1},
    {0, -1},
    {1, 1},
    {-1, 1},
    {1, -1},
    {-1, -1},
};

void solve() {
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        cin >> map_[i];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            track[i][j] = false;
            outsea[i][j] = false;
        }
    }
    // 预处理外海
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (map_[i][j] == '1' or track[i][j]) continue;
            bool yep = false;
            queue<XY> que, arr;
            track[i][j] = true;
            que.push({i, j});
            arr.push({i, j});  // 记录搜索到的所有海域
            while (not que.empty()) {
                XY pos = que.front();
                que.pop();
                // 注意:海域搜索可以往八个方向走,陆地搜索只能朝四个方向
                for (int i = 0; i < 8; i++) {
                    XY nw = {pos.x + nxt[i].x, pos.y + nxt[i].y};
                    if (0 <= nw.x and nw.x < n and 0 <= nw.y and nw.y < m) {
                        if (map_[nw.x][nw.y] == '0' and track[nw.x][nw.y] == false) {
                            track[nw.x][nw.y] = true;
                            que.push(nw);
                            arr.push(nw);
                        }
                    } else {
                        yep = true;  // 如果有一次搜索到地图外,标记此次搜索的所有区域为外海
                    }
                }
            }
            if (yep) {
                while (not arr.empty()) {
                    XY pos = arr.front();
                    arr.pop();
                    outsea[pos.x][pos.y] = true;  // 标记搜索到的海域为外海
                }
            }
        }
    }

    // 别忘了清空访问标记
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            track[i][j] = false;
        }
    }
    // 处理岛屿
    int cnt = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (map_[i][j] == '0' or track[i][j]) continue;
            bool yep = false;
            queue<XY> que;
            track[i][j] = true;
            que.push({i, j});
            while (not que.empty()) {
                XY pos = que.front();
                que.pop();
                for (int i = 0; i < 4; i++) {
                    XY nw = {pos.x + nxt[i].x, pos.y + nxt[i].y};
                    if (0 <= nw.x and nw.x < n and 0 <= nw.y and nw.y < m) {
                        if (map_[nw.x][nw.y] == '1') {
                            if (track[nw.x][nw.y] == false) {
                                track[nw.x][nw.y] = true;
                                que.push(nw);
                            }
                        } else {
                            if (outsea[nw.x][nw.y]) {
                                yep = true;  // 搜索到外海为外岛
                            }
                        }
                    } else {
                        yep = true;  // 搜索到边界外为外岛
                    }
                }
            }
            if (yep) {
                cnt++;  // 外岛计数
            }
        }
    }
    cout << cnt << endl;
}

int32_t main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    int t;
    cin >> t;
    while (t--)
        solve();

    return 0;
}

G: 子串简写

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

// 子串简写
#include <bits/stdc++.h>
#define int int64_t
#define endl '\n'
#ifdef _DEBUG
#pragma GCC optimize(2)
#endif
using namespace std;
const int MAX = 5e5 + 5;
const int INF = 0x3f3f3f3f3f3f3f3fll;
const int MOD = 1e9 + 7;

int aa[MAX], cnt_aa = 0;
int bb[MAX], cnt_bb = 0;

// binary_search 二分查找
int bs(int x) {
    int l = 0, r = cnt_bb - 1;
    while (l <= r) {
        int mid = l + r >> 1;
        if (bb[mid] < x) {
            l = mid + 1;
        } else {
            r = mid - 1;
        }
    }
    return l;
}

void solve() {
    int k;
    cin >> k;
    string s;
    cin >> s;
    int n = s.size();
    char a, b;
    cin >> a >> b;
    for (int i = 0; i < n; i++) {
        if (s[i] == a) {
            aa[cnt_aa++] = i;  // 转储 c1 位置序列
        }
        if (s[i] == b) {
            bb[cnt_bb++] = i;  // 转储 c2 位置序列
        }
    }
    int res = 0;
    for (int i = 0; i < cnt_aa; i++) {
        res += cnt_bb - bs(aa[i] + k - 1);  // 记录有效贡献
    }
    cout << res << endl;
}

int32_t main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    solve();

    return 0;
}
#include<iostream>
using namespace std;
int main(){
	string s;
	string a,b;
	int n;
	int ans = 0;
	cin >> n;
	cin >> s >> a >> b;
	for(int i = 0;i < s.length();i++){
		for(int j = i+3;j<s.length();j++){
			if(s[i]==a[0]){
				if(s[j] == b[0]){
					ans++;
				}
			}
		}
	}
	cout << ans;
	return 0;
}

输出为:
在这里插入图片描述

仅供参考,个人看法。反正结果正确,理解万岁,大家有什么更好的想法,欢迎评论区交流。。评论区见。

H: 整数删除

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

// 整数删除
#include <bits/stdc++.h>
#define int int64_t
#define endl '\n'
#ifdef _DEBUG
// #pragma GCC optimize(2)
#endif
using namespace std;
const int MAX = 5e5 + 5;
const int INF = 0x3f3f3f3f3f3f3f3fll;
const int MOD = 1e9 + 7;
int a[MAX];
int left_[MAX], right_[MAX];  // 仿链表结构

using pii = pair<int, int>;

// 小顶堆, 手写堆方法与 prority_queue 相仿,可跳至 第121行 void solve();
namespace heap {

pii heap[MAX << 1];  // 堆 (树状数组)
int a2h[MAX << 1];   // 数组索引 -> 堆索引
int h2a[MAX << 1];   // 堆索引 -> 数组索引
int total = 0;       // 总节点 (含已 pop 节点)
int siz = 0;         // 堆大小

// C 风格比较函数
bool cmp(pii x, pii y) { return x > y; }

// 维护映射的交换
void swap_(int u, int v) {
    swap(a2h[h2a[u]], a2h[h2a[v]]);
    swap(h2a[u], a2h[v]);
    swap(heap[u], heap[v]);
    if (u == siz) {
        a2h[h2a[u]] = -1;
        h2a[u] = -1;
    }
    if (v == siz) {
        a2h[h2a[v]] = -1;
        h2a[v] = -1;
    }
}

// 向上维护
void up(int node) {
    while (node and cmp(heap[(node - 1) / 2], heap[node])) {
        swap_(node, (node - 1) / 2);
        node = (node - 1) / 2;
    }
}

// 向下维护
void down(int node) {
    int parent = node;         // 父节点下标
    int child = 2 * node + 1;  // 子节点下标
    while (child < siz) {
        // 判断子节点哪个大, 大的与父节点比较
        if (child + 1 < siz and cmp(heap[child], heap[child + 1]))
            child++;
        if (cmp(heap[parent], heap[child]))  // 判断父节点是否小于子节点
        {
            swap_(parent, child);  // 交换父节点和子节点
            parent = child;        // 子节点下标 赋给 父节点下标
        }
        child = child * 2 + 1;  // 换行, 比较下面的父节点和子节点
    }
}

// 线性初始化堆
void build(int n) {
    total = siz = n;
    for (int i = 0; i < siz; i++) {
        a2h[i] = i;
        h2a[i] = i;
    }
    for (int i = siz / 2 - 1; i >= 0; i--)
        // 必须自下而上
        down(i);
}

// 插入节点
void push(pii x) {
    heap[siz] = x;
    a2h[total] = siz;
    h2a[siz] = total;
    up(siz);
    total++;
    siz++;
}

// 返回顶值
pii top() { return heap[0]; }

// 删除顶点
pii pop() {
    siz--;
    swap_(0, siz);
    down(0);
    return heap[siz];
}

// 修改第 u 个插入的节点
void modify_by_address(int u, pii x) {
    int v = a2h[u];
    heap[v] = x;
    down(v);
    up(v);
}

// 删除第 u 个插入的节点. 返回: 布尔型: 节点在堆中
void pop_by_address(int u) {
    int v = a2h[u];
    siz--;
    swap_(v, siz);
    down(v);
    up(v);
}

}  // namespace heap

void solve() {
    int n, k;
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    for (int i = 0; i < n; i++) {
        if (i > 0)
            left_[i] = i - 1; // 初始 i 的前驱 i - 1 
        else
            left_[i] = -1;  // 没有前驱的特殊标记
        if (i < n - 1)
            right_[i] = i + 1;  // 初始 i 的后继 i + 1
        else
            right_[i] = -1;
        heap::push({a[i], i});  // 放入堆中
    }
    int cnt = 0;
    while (cnt < k) {
        pii p = heap::pop();  // 取出最小的数
        int idx = p.second, x = p.first;  // idx 为数的索引,x 为这个数
        if (a[idx] != x) continue;  // 过滤脏数据
        // 如果有前驱
        if (left_[idx] >= 0) {
            a[left_[idx]] += x;  // 贡献给前驱
            heap::push({a[left_[idx]], left_[idx]});  // 加入修改后数据,原数据变为脏数据,延迟过滤
            right_[left_[idx]] = right_[idx]; // 更新前驱的后继
        }
        // 如果有后继
        if (right_[idx] >= 0) {
            a[right_[idx]] += x; // 贡献给后继
            heap::push({a[right_[idx]], right_[idx]});  // 加入修改后数据,原数据变为脏数据,延迟过滤
            left_[right_[idx]] = left_[idx]; // 更新后继的前驱
        }
        // 标记为无效
        a[idx] = -1;
        cnt++;
    }
    // 输出
    for (int i = 0; i < n; i++)
        if (a[i] >= 0)
            cout << a[i] << ' ';
    cout << endl;
}

int32_t main() {
#ifdef _DEBUG
    // freopen("H.in", "r", stdin);
    // freopen("H.out", "w", stdout);
    // clock_t st = clock();
#endif

    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    solve();

#ifdef _DEBUG
    // cout << "COST: " << clock() - st << endl;
#endif
    return 0;
}
#include <iostream>
#include<cstdio>
using namespace std;
#define MAX 1000000
struct shuzu{
	long a[MAX] = {0};
	long len = 0;
}s;
long sort(shuzu &s){
	long min = s.a[0];
	long i= 0;
	long biao = 0;
	for(i = 1;i<s.len;i++){
		if(s.a[i]<min){
			min = s.a[i];
			biao = i;
		}
	}		
	return biao;
}
void del(shuzu &s,int x){
	long i;
	for(i = x;i<s.len;i++){
		s.a[i] = s.a[i+1];
	}
	s.len = s.len - 1;
}
int main(){
	long n,k;
	cin >> n >> k;
	s.len = n;
	for(int i = 0;i<n;i++){
		cin >> s.a[i];
	}
	for(int i = 0;i < k;i++){
		long x = sort(s);
		long shu = s.a[x];
		if(x == 0){
			s.a[x+1] += shu;
		}
		else if(x == s.len){
			s.a[x-1] += shu;
		}
		else{
			s.a[x+1] += shu;
			s.a[x-1] += shu;
		}
		del(s,x);	
	}
	for(int i = 0;i<s.len;i++){
		printf("%d ",s.a[i]);
	}
	return 0;
}

示例结果也正确。
在这里插入图片描述

I: 景区导游

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

// 景区导游
#include <bits/stdc++.h>
#define int int64_t
#define endl '\n'
using namespace std;
const int MAX = 1e5+5;
const int LOG = 20;
const int INF = 0x3f3f3f3f3f3f3f3fll;
const int MOD = 1e9+7;

// 建议直接去写板子,别看了

int lg2[MAX];
int depth[MAX];
int st[MAX][LOG];
int dis[MAX];
vector<pair<int, int>> edge[MAX];

void load_lg2() {
    lg2[0] = -1;
    for (int i = 1; i < MAX; i++) {
        lg2[i] = lg2[i / 2] + 1;
    }
}

void build(int x, int pre, int level) {
    depth[x] = level;
    st[x][0] = pre;
    for (int i = 1; i <= lg2[depth[x]]; i++) {
        st[x][i] = st[st[x][i-1]][i-1];
    }
    for (pair<int, int> p : edge[x]) {
        int y = p.first, d = p.second;
        if (y == pre) continue;
        dis[y] = dis[x] + d;
        build(y, x, level + 1);
    }
}

int lca(int x, int y) {
    if (depth[x] > depth[y]) swap(x, y);
    while (depth[x] < depth[y]) {
        y = st[y][lg2[depth[y]-depth[x]]];
    }
    if (x == y) return x;
    for (int i = lg2[depth[x]]; i >= 0; i--) {
        if (st[x][i] != st[y][i]) {
            x = st[x][i];
            y = st[y][i];
        }
    }
    return st[x][0];
}

int a[MAX];
int rount[MAX];

void solve() {
    int n, k;
    cin >> n >> k;
    for (int i = 1; i < n; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        edge[u].push_back({v, w});
        edge[v].push_back({u, w});
    }
    dis[1] = 0;
    build(1, 1, 0);
    for (int i = 0; i < k; i++) {
        cin >> a[i];
    }
    int tot = 0;
    for (int i = 1; i < k; i++) {
        int f = lca(a[i-1], a[i]);
        rount[i] = dis[a[i-1]] - dis[f] + dis[a[i]] - dis[f];
        tot += rount[i];
    }
    cout << tot - rount[1] << ' ';  // 第一个
    for (int i = 1; i < k - 1; i++) {
        int f = lca(a[i-1], a[i+1]);
        // 中间置换
        cout << tot - rount[i] - rount[i+1] + dis[a[i-1]] - dis[f] + dis[a[i+1]] - dis[f] << ' ';
    }
    cout << tot - rount[k-1] << endl;  // 最后一个
    while (true) {
        int x, y;
        cin >> x >> y;
        cout << lca(x, y) << endl;
    }
}   

int32_t main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    load_lg2();
    solve();

    return 0;
}

J: 砍树

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

// 砍树
#include <bits/stdc++.h>
#define int int64_t
#define endl '\n'
using namespace std;
const int MAX = 1e5+5;
const int LOG = 20;
const int INF = 0x3f3f3f3f3f3f3f3fll;
const int MOD = 1e9+7;

// 代码较长,建议从 solve 开始看

int lg2[MAX];
int depth[MAX];
int st[MAX][LOG]; // pre[i] 即为 st[i][0]
int weight[MAX];
vector<pair<int, int>> edge[MAX]; // pre : suf, idx

void load_lg2() {
    lg2[0] = -1;
    for (int i = 1; i < MAX; i++) {
        lg2[i] = lg2[i / 2] + 1;
    }
}

void build(int x, int pre, int level) {
    depth[x] = level;
    st[x][0] = pre;
    for (int i = 1; i <= lg2[depth[x]]; i++) {
        st[x][i] = st[st[x][i-1]][i-1];
    }
    for (pair<int, int> p : edge[x]) {
        int y = p.first;
        if (y == pre) continue;
        build(y, x, level + 1);
    }
}

int lca(int x, int y) {
    if (depth[x] > depth[y]) swap(x, y);
    while (depth[x] < depth[y]) {
        y = st[y][lg2[depth[y]-depth[x]]];
    }
    if (x == y) return x;
    for (int i = lg2[depth[x]]; i >= 0; i--) {
        if (st[x][i] != st[y][i]) {
            x = st[x][i];
            y = st[y][i];
        }
    }
    return st[x][0];
}

void dfs(int x, int pre) {
    for (pair<int, int> p : edge[x]) {
        int y = p.first;
        if (y == pre) continue;
        dfs(y, x);
        weight[x] += weight[y];
    }
}

void solve() {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i < n; i++) {
        int u, v;
        cin >> u >> v;
        edge[u].push_back({v, i});
        edge[v].push_back({u, i});
    }
    build(1, 0, 0);  // lca 初始化, 不能写 build(1, 1, 0)
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        int f = lca(u, v);
        // 记录差分
        weight[u]++;
        weight[v]++;
        weight[f]--;
        weight[st[f][0]]--;
    }
    dfs(1, 0);
    // 输出
    int res = -1;
    for (int x = 1; x <= n; x++) {
        if (weight[x] == m) {
            for (pair<int, int> p : edge[x]) {
                int y = p.first, idx = p.second;
                if (weight[y] == m) {
                    res = max(res, idx);
                }
            }
        }
    }
    cout << res << endl;
}

int32_t main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    load_lg2();
    solve();

    return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么独享ip会更高效?

随着互联网的蓬勃发展&#xff0c;代理IP因其特性&#xff0c;也备受关注&#xff0c;代理IP又有分共享代理IP和独享代理IP&#xff0c;但&#xff0c;无论是在数据采集方面&#xff0c;还是在其他业务场景上&#xff0c;独享代理IP似乎会更受用户欢迎一点&#xff0c;这到底是…

SpringCloud之网关组件Gateway学习

SpringCloud之网关组件Gateway学习 GateWay简介 Spring Cloud Gateway是Spring Cloud的⼀个全新项目&#xff0c;目标是取代Netflix Zuul&#xff0c;它基于Spring5.0SpringBoot2.0WebFlux&#xff08;基于高性能的Reactor模式响应式通信框架Netty&#xff0c;异步⾮阻塞模型…

每日一题 --- 977. 有序数组的平方[力扣][Go]

今天这一题和昨天的知识点是一样的&#xff0c;就是双指针法。 题目&#xff1a; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,1…

Zero-Change Object Transmission for Distributed Big Data Analytics——论文泛读

ATC 2022 Paper 问题 分布式大数据分析在很大程度上依赖于Java和Scala等高级语言的可靠性和多功能性。然而&#xff0c;这些高级语言也为数据传输制造了障碍。要在Java虚拟机&#xff08;JVM&#xff09;之间传输数据&#xff0c;发送方应将对象转换为字节数组&#xff08;序…

ArmSoM-Sige RK3588开发板产品简介

让我们在 5 分钟内了解 Sige7。 简介​ ArmSoM-Sige7采用Rockchip RK3588新一代旗舰级八核64位处理器&#xff0c;主频高达2.4GHz&#xff0c;6 TOPS算力NPU&#xff0c;最大可配32GB大内存。支持8K视频编解码&#xff0c;拥有丰富的接口&#xff0c;支持双2.5G网口、WiFi6 &…

虚拟机开机启动失败,进入(initramfs)解决办法

虚拟机开机启动失败&#xff0c;进入&#xff08;initramfs&#xff09;解决办法 打开虚拟机中Ubuntu时进入(initramfs)&#xff0c;导致无法进入桌面。问题如下图显示&#xff1a; 命令行输入 fsck -y /dev/sda5输入 exit进入 选择root 后回车 输入虚拟机的密码 进入 root …

项目成功秘诀:高效管理策略确保按时交付v2

一、项目成功的重要性 在当今竞争激烈的商业环境中&#xff0c;项目的成功对于企业的生存和发展具有至关重要的意义。项目的成功不仅意味着企业能够达成既定的业务目标&#xff0c;还能提升企业的市场地位、增强品牌影响力&#xff0c;并为企业的可持续发展奠定坚实基础。我们…

C++ Primmer 12.3文本查询程序(自己原来写的,跟课本中比较)

题目要求如下 1.自己版本 #pragma once #include <fstream> #include <string> #include <vector> #include <set> #include <map> #include <iostream> #include <sstream>using namespace std;int main() {ifstream t_if (&quo…

乱码问题,字符流原理

首先科普一下知识&#xff0c;我们知道ASCII码中有128的数字&#xff0c;符号&#xff0c;或大小写字母&#xff0c;这对于英文来说已经够用了&#xff0c;一个字母占用一个字节&#xff08;一个字节8bit&#xff09;&#xff0c; 存储的过程是这样的&#xff0c;一个字母w&…

二进制王国(蓝桥杯备赛)【sort/cmp的灵活应用】

二进制王国 题目链接 https://www.lanqiao.cn/problems/17035/learning/?contest_id177 题目描述 思路 这里就要灵活理解字典序排列&#xff0c;虽然string内置可以直接比较字符串字典序&#xff0c;但是在拼接时比较特殊&#xff0c;比如 11的字典序小于110&#xff0c;但…

鸿蒙Harmony应用开发—ArkTS(@Extend装饰器:定义扩展组件样式)

在前文的示例中&#xff0c;可以使用Styles用于样式的扩展&#xff0c;在Styles的基础上&#xff0c;我们提供了Extend&#xff0c;用于扩展原生组件样式。 说明&#xff1a; 从API version 9开始&#xff0c;该装饰器支持在ArkTS卡片中使用。 装饰器使用说明 语法 Extend(UI…

4 种策略让 MySQL 和 Redis 数据保持一致

先阐明一下 MySQL 和 Redis 的关系&#xff1a;MySQL 是数据库&#xff0c;用来持久化数据&#xff0c;一定程度上保证数据的可靠性&#xff1b;Redis 是用来当缓存&#xff0c;用来提升数据访问的性能。 关于如何保证 MySQL 和 Redis 中的数据一致&#xff08;即缓存一致性问题…

jmeter超高并发报错解决方法

1、比如jmeter设置并发量为5000&#xff0c;运行后报错socket closed。原因是客户端与服务端做了三次握手之后&#xff0c;后面不需要握手了&#xff0c;但是jmeter没有这个功能&#xff0c;5000个并发每次发接口请求都是独立的&#xff0c;jmeter端口处理不了这么大量的请求&a…

【SpringBoot框架篇】37.使用gRPC实现远程服务调用

文章目录 RPC简介gPRC简介protobuf1.文件编写规范2.字段类型3.定义服务(Services) 在Spring Boot中使用grpc1.父工程pom配置2.grpc-api模块2.1.pom配置2.2.proto文件编写2.3.把proto文件编译成class文件 3.grpc-server模块3.1.pom文件和application.yaml3.2.实现grpc-api模块的…

01. 如何配置ESP32环境?如何开发ESP32?

0. 前言 此文章收录于《ESP32学习笔记》专栏&#xff0c;此专栏会结合实际项目记录作者学习ESP32的过程&#xff0c;争取每篇文章能够将细节讲明白&#xff0c;会应用。 1. 安装IDE&#xff1a;Thonny 后续项目中我们都是使用pythont语言&#xff0c;而thonny工具能很好的支撑E…

Vue3:用重定向方式,解决No match found for location with path “/“问题

一、情景说明 在初学Vue3的项目中&#xff0c;我们配置了路由后&#xff0c;页面会告警 如下图&#xff1a; 具体含义就是&#xff0c;没有配置"/"路径对应的路由组件 二、解决 关键配置&#xff1a;redirect const router createRouter({history:createWebHis…

P1246 编码题解

题目 编码工作常被运用于密文或压缩传输。这里我们用一种最简单的编码方式进行编码&#xff1a;把一些有规律的单词编成数字。 字母表中共有26个字母a,b,c,⋯,z&#xff0c;这些特殊的单词长度不超过6且字母按升序排列。把所有这样的单词放在一起&#xff0c;按字典顺序排列&…

【docker系列】深入理解 Docker 容器管理与清理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

C语言内存函数(1)【memcpy函数的使用与模拟实现】【memmove函数的使用和模拟实现】

关于内存函数有四个函数需要我们学习。分别是memcpy&#xff0c;memmove&#xff0c;memset和memcmp。都在头文件string.h里面。 一.memcpy函数的使用 一提到这个函数&#xff0c;我们可能会联想到strcpy函数&#xff0c;但strcpy函数是针对字符串的拷贝。但是我们在写代码的…

Docker学习笔记 - 基本概念

一. 什么是“容器”&#xff08;container&#xff09;和“镜像”&#xff08;Image&#xff09; 所谓“容器”可以理解为一个模拟操作系统的虚拟层&#xff0c;大部分是基于Linux的&#xff0c;应用程序及其配置信息&#xff0c;依赖库可以打包成一个Image独立运行在这个虚拟…