[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 ...
随机推荐
- Qt 将字符串转成16进制显示
最近项目用到了需要将字符串转换成16进制显示.这玩意折腾了一上午. 首先,数据块内容 struct UserData { char Head[3] = {'X','J','J'}; char Flag ...
- Appium + java截图方法
public static void takeScreenShot(AndroidDriver<WebElement> driver) { File screenShotFile = dr ...
- 使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍
使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍 Photon PUN Unity 网络游戏开发 Photon常用类介绍: IPunCallback PUNGIPunCa ...
- 高可用Kubernetes集群-6. 部署kube-apiserver
八.部署kube-apiserver 接下来3章节是部署Kube-Master相关的服务,包含:kube-apiserver,kube-controller-manager,kube-schedule ...
- RetinaNet 迁移学习到自标数据集
Keras-RetinaNet 在自标数据集 alidq 上训练 detection model RetinaNet 模型部署与环境配置 参考README 数据预处理 数据统计信息: 类别:gun1, ...
- 笔试题——C++字符排序
题目:字符排序 题目介绍:输入一组以空格隔开的字数串,将它们奇数位升序排序,偶数位降序排序,再重新输出成新的字数串. 例: 输入: 4 6 2 3 6 7 8 1 奇数位:4 2 6 8 ——2 4 ...
- US Customs bond DDP 船运
客户提供目的港门点地址,提供美国进口产品的关税税率基本上就可以了关于ISF信息到时候你发给老外让老外填填好就可以了BAND 货值*0.575%POA 货值*0.335%这二个费用如果国内付就付了,国 ...
- 如何报FOB价格
FOB价格是当货物越过船舷,卖方即完成交货.FOB价格术语仅适用于海运或内河运输.在国际贸易中,FOB价格是比较常用的一种,FOB价格作为众多贸易中的一种需要外贸人员熟悉掌握. FOB价格是当货物越过 ...
- PIGCMS 关闭聊天机器人(小黄鸡)
无脑操作举例 1.找到 WeixinAction.class.php 文件,路径: 你的版本\PigCms\Lib\Action\Home 2.查询 function chat ,在 chat() 函 ...
- 判断字符串中是否存在的几种方案:string.indexof、string.contains、list.contains、list.any几种方式效率对比
我们在做项目时,可能会遇到这样的需求,比如判断,1,2,3,33,22,123, 中是否存在,3,. var str=",1,2,3,33,22,123,"; 一般有几种方式: 1 ...