蓝桥每日真题之城邦
2022/1/18 23:42:18
本文主要是介绍蓝桥每日真题之城邦,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目来源
2021年蓝桥省赛第二场E题
http://acm.mangata.ltd/p/P1104
视频讲解
视频连接:https://www.bilibili.com/video/BV1pT4y12721/
思路
我们可以单独写一个计算边权的函数,然后将
2021
×
2020
/
2
×
2
2021 \times 2020 / 2 \times 2
2021×2020/2×2条边放进我们的数组或者容器里面,然后一一判断即可,然后跑一个最小生成树即可,关于计算边权的方法请参考下面的get
函数
代码
#include<bits/stdc++.h> using namespace std; #define ll long long #define mod 1000000009 #define endl "\n" #define PII pair<int,int> const int N = 2e6+10; int n = 2021; int fa[2030]; void init(){ for(int i = 1;i <= n; ++i) fa[i] = i; } int find(int x) { int t = x; while(t != fa[t]) t = fa[t]; while(x != fa[x]) { int temp = fa[x]; fa[x] = t; x = temp; } return x; } struct Edge{ int u,v,w;//起点,终点,权值 }; bool cmp(Edge a, Edge b){ return a.w < b.w; } vector<Edge> V; int get(int a,int b) { int ans = 0; vector<int> l,r; while(a) { l.push_back(a%10); a/=10; } while(b){ r.push_back(b%10); b/=10; } int len1 = l.size(),len2 = r.size(); int i = 0; while(i < len1 && i < len2){ if(l[i] != r[i]) ans += l[i] + r[i]; i++; } while(i < len1) ans += l[i++]; while(i < len2) ans += r[i++]; return ans; } int kruskal(){ int ans = 0; init(); int m = V.size(); for(int i = 0;i < m; ++i){ int u = V[i].u,v = V[i].v; u = find(u); v = find(v); if(u != v) { ans += V[i].w; fa[v] = u; } } return ans; } int main() { cout<<4046<<endl; return 0; for(int i = 1;i <= n; ++i) { for(int j = i + 1;j <= n; ++j) { int w = get(i,j); V.push_back({i,j,w}); V.push_back({j,i,w}); } } sort(V.begin(),V.end(),cmp); cout<<kruskal()<<endl; return 0; } //4046
这篇关于蓝桥每日真题之城邦的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-07转型传统行业避坑指南!
- 2025-01-07百万架构师第九课:源码分析:Spring 源码分析:Spring5源码分析-预习资料|JavaGuide
- 2025-01-07为你的程序精选的4个优质支付API
- 2025-01-06责任分配矩阵在项目管理中的作用:结合工具提升团队生产力
- 2025-01-06板栗看板:优化项目管理的实用策略,助你轻松完成任务
- 2025-01-06电商小白怎么选取合适的工具?一站式工具指南来啦
- 2025-01-06企业如何避免春节期间的项目断层?四大方法教给你!
- 2025-01-06初创团队如何在动态环境下利用看板工具快速迭代
- 2025-01-06企业内部管理如何实现高效?四大策略教会你
- 2025-01-06给 Postgres 写一个向量插件 - 向量类型