题意:

  就是使不大于k条路的权值变为零后求最短路

解析:

  d[i][j]表示使j条路变为权值后从起点到点i的最短路径

这题不能用spfa做  tle

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <cctype>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <bitset>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define rd(a) scanf("%d", &a)
#define rlld(a) scanf("%lld", &a)
#define rc(a) scanf("%c", &a)
#define rs(a) scanf("%s", a)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = , INF = 0x3f3f3f3f;
int n, m, k;
int vis[maxn][];
int d[maxn][];
map<int, map<int, int> > t;
struct edge{
int u,v, d;
edge(int u,int v,int d)
{
this->u = u;
this->v = v;
this->d = d;
} };
vector<edge> Edge;
vector<int> G[maxn<<];
struct node{
int u, d, y;
node(int d,int u, int y)
{
this->d = d;
this->u = u;
this->y = y;
}
bool operator < (const node& a) const {
return d > a.d;
}
};
void add(int u,int v,int d)
{
Edge.push_back(edge(u,v,d));
G[u].push_back(Edge.size()-);
}
void dijkstra(int s)
{
priority_queue<node> Q;
mem(d, INF);
d[s][] = ;
mem(vis,);
Q.push(node(, s, ));
while(!Q.empty())
{
node x = Q.top();Q.pop();
int u = x.u;
int y = x.y;
if(vis[u][y]) continue;
vis[u][y] = ;
for(int i=;i<G[u].size();i++)
{
edge e = Edge[G[u][i]];
if(d[e.v][y] > d[u][y] + e.d)
{
d[e.v][y] = d[u][y] + e.d;
Q.push(node(d[e.v][y],e.v, y));
}
if(y + <= k && d[e.v][y+] > d[u][y])
{
d[e.v][y+] = d[u][y];
Q.push(node(d[e.v][y+], e.v, y+));
}
}
}
} int main()
{
int T;
rd(T);
while(T--)
{
t.clear();
Edge.clear();
for(int i=; i<maxn; i++) G[i].clear();
rd(n), rd(m), rd(k);
int u, v, w;
for(int i=; i<m; i++)
{
rd(u), rd(v), rd(w);
if(!t[u][v] || t[u][v] > w)
t[u][v] = w;
}
for(int i=; i<=n; i++)
for(map<int, int>::iterator it = t[i].begin(); it!=t[i].end(); it++)
add(i, it->first, it->second);
dijkstra();
int mind = INF;
for(int i=; i<=k; i++)
mind = min(mind, d[n][i]);
cout<< mind <<endl;
} return ;
}

Magical Girl Haze 南京网络赛2018的更多相关文章

  1. 2018ICPC南京网络赛

    2018ICPC南京网络赛 A. An Olympian Math Problem 题目描述:求\(\sum_{i=1}^{n} i\times i! \%n\) solution \[(n-1) \ ...

  2. HDU 4751 Divide Groups (2013南京网络赛1004题,判断二分图)

    Divide Groups Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  3. HDU 4750 Count The Pairs (2013南京网络赛1003题,并查集)

    Count The Pairs Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others ...

  4. HDU 4758 Walk Through Squares (2013南京网络赛1011题,AC自动机+DP)

    Walk Through Squares Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Oth ...

  5. 2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)

    2019ICPC南京网络赛A题 The beautiful values of the palace https://nanti.jisuanke.com/t/41298 Here is a squa ...

  6. 2019 南京网络赛A

    南京网络赛自闭现场 https://nanti.jisuanke.com/t/41298 二维偏序经典题型 二维前缀和!!! #include<bits/stdc++.h> using n ...

  7. ACM-ICPC 2018 南京网络赛

    题目顺序:A C E G I J L A. An Olympian Math Problem 打表,找规律,发现答案为n-1 C. GDY 题意: m张卡片,标号1-13: n个玩家,标号1-n:每个 ...

  8. 计蒜客 2018南京网络赛 I Skr ( 回文树 )

    题目链接 题意 : 给出一个由数字组成的字符串.然后要你找出其所有本质不同的回文子串.然后将这些回文子串转化为整数后相加.问你最后的结果是多少.答案模 1e9+7 分析 : 应该可以算是回文树挺裸的题 ...

  9. 2018 ICPC南京网络赛 L Magical Girl Haze 题解

    大致题意: 给定一个n个点m条边的图,在可以把路径上至多k条边的权值变为0的情况下,求S到T的最短路. 数据规模: N≤100000,M≤200000,K≤10 建一个立体的图,有k层,每一层是一份原 ...

随机推荐

  1. URL Encode

    用VC实现post数据常常会遇到URL编码问题 在此封装一个工具类进行UTF8编码的转换 源码来自php source code 只是简单的封装给C++调用   //URL 编解码类 //来自PHP源 ...

  2. HDFS--大数据应用的基石

    近些年,由于智能手机的迅速普及推动移动互联网技术的蓬勃发展,全球数据呈现爆发式的增长.2018年5月企鹅号的统计结果:互联网每天新增的数据量达2.5*10^18字节,而全球90%的数据都是在过去的两年 ...

  3. 20155334 《网络攻防》 Exp9 Web安全基础

    <网络攻防> Exp9 Web安全基础 一.实验后回答问题 SQL注入攻击原理,如何防御: 原理: 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服 ...

  4. 《网络对抗》Exp5 MSF基础应用

    20155336<网络对抗>Exp5 MSF基础应用 一.基础知识回答 用自己的话解释什么是exploit,payload,encode exploit:渗透攻击的模块合集,将真正要负责攻 ...

  5. mfc 动态为控件添加事件2

    重载窗口过程 为动态控件绑定事件 一.重载窗口过程处理函数 CWnd::WindowProc virtual LRESULT WindowProc( UINT message, WPARAM wPar ...

  6. mfc 嵌套类

    嵌套类 一. 嵌套类 嵌套类的定义 将某个类的定义放在另一个类的内部,这样的类定义,叫嵌套类. class AAA { int aaa; class BBB { int bbb; //其它成员或者函数 ...

  7. [SDOI2010]地精部落[计数dp]

    题意 求有多少长度为 \(n\) 的排列满足 \(a_1< a_2> a_3 < a_4 \cdots\) 或者 $a_1> a_2 < a_3 > a_4\cdo ...

  8. Java使用Redis学习笔记

    如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动. Maven项目可以直接在pom.xml中加入jedis包驱动: <dependency ...

  9. NAND Flash底层原理,SLC MLC TLC比较

    NAND-Flash 的存储原理 固态硬盘最小单元的基本架构如下: 我们知道计算机中所有的信息储存最终都必须回归到 0与1,原则上,只要存储单元能提供两种或两种以上可供辨识的状态,便可以拿来纪录数据. ...

  10. 科普贴 | 以太坊网络中的Gas Limit 和 Gas Price 是什么概念?

    接触以太坊的同学都听过 Gas/ Gas Price/ Gas Limit,那么这些词汇究竟是什么意思? 还有,为什么有时候你的ETH转账会很慢?如何提高ETH转账速度? Ethereum平台 Vit ...