比赛链接:Here

AcWing 3626. 三元一次方程

暴力即可

void solve() {
int n;
cin >> n;
for (int i = 0; i <= n / 3; ++i)
for (int j = 0; j <= n / 5; ++j)
for (int k = 0; k <= n / 7; ++k)
if (i * 3 + j * 5 + k * 7 == n) {
cout << i << " " << j << " " << k << "\n";
return ;
}
cout << -1 << "\n";
}

AcWing 3627. 最大差值

把次k最大值累加到最大值即可

void solve() {
int n, k; cin >> n >> k;
vector<ll>a(n);
for (ll &x : a)cin >> x;
sort(a.begin(), a.end());
int i = n - 2;
while (k and i >= 0) {
if (a[i] == 0) {i--; continue;}
a[n - 1] += a[i];
i--, k--;
}
cout << a[n - 1] << "\n";
}

AcWing 3628. 边的删减

本题给定一个无向连通加权图,从第 1 个点出发到第 i 个点的最短距离记为 di

接着我们需要进行操作,删掉图中的一些边,最多保留原图中的 k 条边

删完边后,如果点 i 到点 1 的距离任然是原图的中最短路长度,则我们称该点为优秀点

我们需要找出一种删边方案,使得最终图中有尽可能多的 优秀点

分析

对于初始图,我们需要得到每个点 i 到起始点 1 的最短路径长度,这毫无疑问会让我们想到最短路算法

因此,一开始我们需要挑选一个最短路算法来求每个点到起点的最短路径

接着看下一个要求,我们要找出一个保留小于等于 k 条边的方案,使得构成最短路的点尽可能多

为了保证我们保留下来的边是有价值的,因此我们保留的边一定是更新出最短路的边

而 \(Dijkstra\)算法 的贪心思想是:每次更新到起点距离最短的点的最短路长度

利用该性质,我们知道:

\(Dijkstra\)算法 对于每轮更新出最短路的点来说,最后一次更新他距离的边一定是 有价值的

这些有价值的边,连成的点就构成了一个最短路树

因此我们直接用 Dijkstra 求一遍最短路的同时,把每个点最后一次被更新最短距离的边都存下来

于是被保留下来边,一定是有价值的边

从前往后(不从前往后保留,就不在一个连通块里,那这样的边也是没价值的),把这些边保留下来即可

注意:用 long long 存路径长度

#define x first
#define y second
using LL = long long;
typedef pair<LL, int> PII;
const int N = 100010, M = 200010;
int n, m, k;
int h[N], e[M], w[M], id[M], ne[M], idx;
LL dist[N];
bool st[N];
vector<int> ans; void add(int a, int b, int c, int d) { // 添加一条边a->b,边权为c
e[idx] = b, w[idx] = c, id[idx] = d, ne[idx] = h[a], h[a] = idx ++ ;
} void dijkstra() { // 求1号点到n号点的最短路距离
memset(dist, 0x3f, sizeof dist);
dist[1] = 0;
priority_queue<PII, vector<PII>, greater<PII>> heap;
heap.push({0, 1}); while (heap.size()) {
auto t = heap.top();
heap.pop(); int ver = t.second, distance = t.first; if (st[ver]) continue;
st[ver] = true; for (int i = h[ver]; i != -1; i = ne[i]) {
int j = e[i];
if (dist[j] > dist[ver] + w[i]) {
dist[j] = dist[ver] + w[i];
heap.push({dist[j], j});
}
}
}
} void dfs(int u) {
st[u] = true;
for (int i = h[u]; ~i; i = ne[i]) {
int j = e[i];
if (!st[j] && dist[j] == dist[u] + w[i]) {
if (ans.size() < k) ans.push_back(id[i]);
dfs(j);
}
}
} int main() {
cin >> n >> m >> k;
memset(h, -1, sizeof h);
for (int i = 1; i <= m; i ++ ) {
int a, b, c;
cin >> a >> b >> c;
add(a, b, c, i), add(b, a, c, i);
} dijkstra(); memset(st, 0, sizeof st);
dfs(1); printf("%d\n", ans.size());
for (auto x : ans) printf("%d ", x);
return 0;
}

AcWing 第 2 场周赛的更多相关文章

  1. AcWing第85场周赛

    这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...

  2. AcWing 第11场周赛题解

    计算abc 首先 \(0<=a<=b<=c\) 会随机给出 \(a+b,a+c,b+c,a+b+c\)的值 因为\(a,b,c\)都为正整数,所以\(a+b+c\)一定为最大值 然后 ...

  3. AcWing第78场周赛

    今天想起来了,就补一下吧~ 第一题 商品分类 货架中摆放着 n 件商品,每件商品都有两个属性:名称和产地. 当且仅当两件商品的名称和产地都相同时,两件商品才视为同一种商品. 请你统计,货架中一共有多少 ...

  4. LeetCode-第 166 场周赛

    LeetCode-第 166 场周赛 1281.subtract-the-product-and-sum-of-digits-of-an-integer 1282.group-the-people-g ...

  5. LeetCode 第 165 场周赛

    LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...

  6. LeetCode--第180场周赛

    LeetCode--第180场周赛 1380. 矩阵中的幸运数 class Solution { public: vector<int> luckyNumbers (vector<v ...

  7. Leetcode第 217 场周赛(思维量比较大)

    Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...

  8. 【AcWing】第 62 场周赛 【2022.07.30】

    AcWing 4500. 三个元素 题目描述 给定一个长度为 \(n\) 的数组 \(r\_1,r\_2,-,r\_n\). 请你找到其中的三个元素 \(r\_a,r\_b,r\_c\),使得 \(r ...

  9. Leetcode 第133场周赛解题报告

    今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...

  10. 第二场周赛(递归递推个人Rank赛)——题解

    很高兴给大家出题,本次难度低于上一场,新生的六个题都可以直接裸递归式或者裸递推式解决,对于老生的汉诺塔3,需要找出一般式,后两题分别为裸ST算法(或线段树)/线性DP. 正确的难度顺序为 种花 角谷定 ...

随机推荐

  1. js检测数据类型得四种方式

    1.typeof:返回一个字符串,表示操作数的类型. 语法: typeof(变量) //or typeof 变量 示例:     console.log(typeof 2)//number     c ...

  2. 小满OKKICRM与金蝶云星空对接集成客户资料

    小满OKKICRM与金蝶云星空对接集成客户列表查询(更新列表)&客户新增(小满客户对接金蝶客户-P) 数据源平台:小满OKKICRM 小满科技成立于2013年,是阿里巴巴集团战略投资的高新技术 ...

  3. 【JMeter】使用nmon进行性能资源监控

    使用nmon进行性能资源监控 目录 使用nmon进行性能资源监控 一.前言 二.nmon的下载安装 1.查看系统信息 2.查看CPU信息 2.下载 3.解压 4.一个小问题 三.在性能测试时使用命令行 ...

  4. LeetCode190:颠倒二进制(位运算分治! 时间复杂度O(1))

    解题思路:这道题很两种解法,常规的就是O(n),另一种就是巧妙的利用位运算实现分治,时间复杂度O(1),类似于归并排序.不过这个递归不是自顶向下,而是巧用位运算从自底向上实现. 比如01001000通 ...

  5. 用C#也能做机器学习?

    前言 说到机器学习,大家可能都不陌生,但是用C#来做机器学习,可能很多人还第一次听说.其实在C#中基于ML.NET也是可以做机器学习的,这种方式比较适合.NET程序员在项目中集成机器学习模型,不太适合 ...

  6. 解密视频魔法:将ExternalOES纹理转化为TEXTURE_2D纹理

    在使用OpenGL ES进行图形图像开发时,我们常使用GL_TEXTURE_2D纹理类型,它提供了对标准2D图像的处理能力.这种纹理类型适用于大多数场景,可以用于展示静态贴图.渲染2D图形和进行图像处 ...

  7. gho、wim、esd的区别

    本文介绍的仅仅是压缩格式上的区别,并不是一些个体错误理解的 "GHOST 镜像 = 带驱动的快速装机镜像",实际 ESD 格式和 WIM 格式,也一样是可以集成驱动做成二次封装的快 ...

  8. Weblogic获取端口IP

    Weblogic获取端口IP 获取端口IP只为了判断哪个节点 调用 private WebMBeanServer server=new WebMBeanServer(); synlog.info(&q ...

  9. 使用 PostgreSQL 实现 PageRank

    PageRank 算法 ​ 作为 Google 最早的一个网页排名算法,该算法在早期的搜索引擎中是搜索结果最为准确的,同时也是 Google 发家的一个重要算法.尽管这些年来该算法不再是 Google ...

  10. certbot申请泛域名证书并自动续签保姆级教程

    certbot申请泛域名证书并自动续签(使用docker进行部署) 一.涉及到的资源及文档 1.云解析 - OpenAPI 概览:https://next.api.aliyun.com/documen ...