[ACM][2018南京预赛]Magical Girl Haze
一、题面

样例输入:
1
5 6 1
1 2 2
1 3 4
2 4 3
3 4 1
3 5 6
4 5 2
样例输出:
3
二、思路
关键词:分层BFS
考试时觉得题干意思很清晰——求可将k条边赋值为0的最短路。起初几个思路正确性均存疑,后来觉得应该要DP于是决定滞后了。。。
正解——分层BFS,个人认为思路与DP有些许相像,同时记录节点及当前已赋值为0的边数,则在跑最短路时(这里用的SPFA),可选择是否将该条边赋值为0,当且仅当已选边<k。
三、代码
#include <cstdio>
#include <cstring> #define MAXN 100005
#define MAXM 200005
#define MAXK 15
#define INF 0x3f3f3f3f int T, n, m, k, u, v, w, o, h[MAXN], d[MAXN][MAXK], vis[MAXN][MAXK]; struct node {
int n, k;
} q[MAXN]; struct edge {
int v, next, w;
} e[MAXM]; void add(int u, int v, int w) {
o++, e[o] = (edge) {v, h[u], w}, h[u] = o;
} int spfa() {
int head = , tail = ;
memset(d, INF, sizeof(d)), memset(vis, , sizeof(vis));
q[head] = (node) {, }, d[][] = , vis[][] = ;
while (head != tail) {
node o = q[head];
vis[o.n][o.k] = ;
for (int x = h[o.n]; x; x = e[x].next) {
int v = e[x].v;
if (d[v][o.k] > d[o.n][o.k] + e[x].w) {
d[v][o.k] = d[o.n][o.k] + e[x].w;
if (!vis[v][o.k]) vis[v][o.k] = , q[tail++] = (node) {v, o.k};
}
if (o.k < k) {
if (d[v][o.k + ] > d[o.n][o.k]) {
d[v][o.k + ] = d[o.n][o.k];
if (!vis[v][o.k + ]) vis[v][o.k + ] = , q[tail++] = (node) {v, o.k + };
}
}
}
head++;
}
return d[n][k];
} int main() {
scanf("%d", &T);
for (int i = ; i <= T; i++) {
o = , memset(h, , sizeof(h));
scanf("%d %d %d", &n, &m, &k);
for (int j = ; j <= m; j++) scanf("%d %d %d", &u, &v, &w), add(u, v, w);
printf("%d\n", spfa());
}
return ;
}
多个子问题着重考虑各种初始化!
[ACM][2018南京预赛]Magical Girl Haze的更多相关文章
- [ACM][2018南京预赛]Lpl and Energy-saving Lamps
一.题面 样例输入: 5 4 3 10 5 2 7 10 5 1 4 8 7 2 3 6 4 7 样例输出: 4 0 1 1 3 6 5 1 5 1 2 0 3 2 4 4 3 6 5 1 二.思路 ...
- [ACM][2018南京预赛]Sum
一.题面 样例输入: 2 5 8 样例输出: 8 14 二.思路 关键词:线性筛 在Zed的帮助下知道了这是一道线性筛的比较裸的题了.考试过程中肝这道题的时间最久,费了心思找到递推式后,发现根本不是在 ...
- ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze
262144K There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v ...
- ACM-ICPC 2018 南京赛区网络预赛
轻轻松松也能拿到区域赛名额,CCPC真的好难 An Olympian Math Problem 问答 只看题面 54.76% 1000ms 65536K Alice, a student of g ...
- ACM-ICPC 2018 南京赛区网络预赛(12/12)
ACM-ICPC 2018 南京赛区网络预赛 A. An Olympian Math Problem 计算\(\sum_{i=1}^{n-1}i\cdot i!(MOD\ n)\) \(\sum_{i ...
- ACM-ICPC 2018 南京赛区网络预赛 J.sum
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- ACM-ICPC 2018 南京赛区网络预赛 E题
ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...
- ACM-ICPC 2018 南京赛区网络预赛B
题目链接:https://nanti.jisuanke.com/t/30991 Feeling hungry, a cute hamster decides to order some take-aw ...
- 计蒜客 30999.Sum-筛无平方因数的数 (ACM-ICPC 2018 南京赛区网络预赛 J)
J. Sum 26.87% 1000ms 512000K A square-free integer is an integer which is indivisible by any squar ...
随机推荐
- selenium webdriver API详解(三)
本系列主要讲解webdriver常用的API使用方法(注意:使用前请确认环境是否安装成功,浏览器驱动是否与谷歌浏览器版本对应) 一:获取页面元素的文本内容:text 例:获取我的博客名字文本内容 代码 ...
- Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- 二、Django快速安装
一.安装Python 作为一个Python Web框架,Django依赖Python.从Django适用于哪些版本的Python可以获取更多信息.较新版本的Python内置一个轻量级的数据库SQLit ...
- jvm之GC知识点
GCRoots: 虚拟机栈(栈帧中的局部变量表)引用的对象 方法区中静态属性引用的对象 方法去中常量引用的对象 本地方法栈中JNI(NATIVE方法) ...
- 高可用Kubernetes集群-3. etcd高可用集群
五.部署高可用etcd集群 etcd是key-value存储(同zookeeper),在整个kubernetes集群中处于中心数据库地位,以集群的方式部署,可有效避免单点故障. 这里采用静态配置的方式 ...
- LCA(Tarjan算法)模板
一.查询一组的LCA Nearest Common Ancestors A rooted tree is a well-known data structure in computer science ...
- DataTable转List<T>集合
#region DataTable转List集合 +static IList<T> DataTableToList<T>(DataTable dt) where T : cla ...
- DB2 日志
跟Oracle类似DB2也分为两个模式,日志循环vs归档日志,也就是非归档和归档模式,下面对这两种模式做简单的介绍. 日志循环 日志循环是默认方式,也就是非归档模式,这种模式只支持backup off ...
- 操作系统之实验二Step1-有序顺序表
实验二Step1-有序顺序表 专业:商业软件工程 班级:商软2班 姓名:甘佳萍 学号:201406114207 实验要求:初始化 输入数组元素个数. 输入n个数,排序输出. 存 ...
- 【第一周】c++实现词频统计
coding.net地址:https://coding.net/u/Boxer_ ssh:git@git.coding.net:Boxer_/homework.git ---------------- ...