题意:

  就是使不大于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. pstack 故障排除思路

    1.先使用top看下CPU占用高的进程,找出进程的进程ID(pid): 查看方法:top 2.根据进程ID(pid)查看是进程的那些线程占用CPU高. 查看方法:top -Hp pid3.使用psta ...

  2. Eclipse-设置启动JDK版本

    打开eclipse安装目录下的eclipse.ini文件,将红色内容加入 -vm ../Java/jdk1.6.0_26/bin (或者指向具体目录:D:/software/jdk_1.8u91/bi ...

  3. China Internet Conference(2018.07.12)

    中国互联网大会 时间:2018.07.12地点:北京国家会议中心

  4. Python3入门(一)——概述与环境安装

    一.概述 1.python是什么 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和 ...

  5. SimpleDateFormat-时间格式化中的大小写字符

    一.SimpleDateFormat: 这个类是用来格式化date类型数据为指定格式的时间的 使用的而时候,总是区分不清 yyyy-mm-dd yyyy-MM-dd 而使用不同的大小写字符格式化出来的 ...

  6. POJ 2965&&1753

    最近由于复习备考(然而考得还是很炸),很久没打题目了.现在开始刷寒假作业,不得不搞POJ 话说没有中文真的好烦啊! 先看1753 题目大意是说在一个4*4的格子中有黑白两色的棋子,你可以翻动其中的棋子 ...

  7. Ubuntu16.04上用源代码安装ICE

    ubuntu16.04上用源代码安装ICE

  8. 利用OVS+FLOODLIGHT,为数据表添加VLAN_ID和MPLS

    话不多说,直接上拓扑: 我这里是用主机h1 (10.0.0.1)ping 主机h2(10.0.0.2) 1.添加VLAN标签 v1: sudo ovs-ofctl add-flow m1-s1 in_ ...

  9. js 二进制操作

    //二进制保存var content = "file content!"; var data = new Blob([content],{type:"text/plain ...

  10. 网站遭受大量CC攻击后的应对策略

    上周开始我网站遭受了一大波CC攻击,到目前为止仍在继续,作为一个建站小白,我感觉压力好大,又有新的问题要挑战了! 服务器架设在腾讯云,CC攻击很凶猛,带宽瞬间占满,于是在腾讯云后台配置安全组关闭了80 ...