[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 ...
随机推荐
- Eclipse 无法编译 或 提示“错误: 找不到或无法加载主类”
project显示一个红色叹号,通常是.jar文件缺失,在下面找到配置 在libraries中添加add External JARs添加.jar文件
- HIVE中的数据怎么导出到hdfs或本地呢
思路一:重定向 在我不知道工具 ,也不熟悉HIQL语法的情况下,没办法了,只有选择一个最简单粗暴的方法,重定向. 在shell中使用 hive -e 可以在shell中执行hive命令,hive -f ...
- PHP 整数
实验环境php 5.2.17,参考资料:PHP手册 1.整数溢出 如果整数超出最大范围或者运算结果超出最大范围,都会转变成float <?php $a=2147483647; var_dump( ...
- ORA-28000: the account is locked 查哪个具体ip地址造成
查系统默认的策略,连续验证10次错误帐户即会被锁 SQL> select resource_name, limit from dba_profiles where profile='DEFAUL ...
- 《Linux内核与分析》第八周
by 20135130王川东 一.进程切换关键代码switch-to分析 1.进程调度与进程调度时机分析 1)不同类型的进程有不同的调度要求 分类:I/0-bound:频繁的进行I/o 通常会 ...
- 随机生成30道四则运算题NEW
代码: #include <iostream> #include <time.h> using namespace std; void main() { srand((int) ...
- HDU 5172 GTY's gay friends 线段树+前缀和+全排列
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5172 bc(中文):http://bestcoder.hdu.edu.cn/contest ...
- lintcode-421-简化路径
421-简化路径 给定一个文档(Unix-style)的完全路径,请进行路径简化. 样例 "/home/", => "/home" "/a/./ ...
- jQuery之offset,position
获取/设置标签的位置数据 * offset(): 相对页面左上角的坐标 * position(): 相对于父元素左上角的坐标. 需求: 1. 点击 btn1 打印 div1 相对于页面左上角的位置 打 ...
- 0330复利计算java版
package compounding; import java.util.Scanner; public class compounding1_1 { public static void main ...