【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

定义dis[i][j]表示到达i这个点。
用掉了j次去除边的机会的最短路。
dis[1][0]= 0;
在写松弛条件的时候。
如果用了去除边的机会。
就把机会+1再更新最短路就好。
用spfa会超时。
写个dijkstra+优先队列优化就ok
在dis[n][0..k]中找最小值就好。

【代码】

#include <bits/stdc++.h>
#define LL long long
#define ms(a,b) memset(a,b,sizeof a)
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
const LL mod=1000000007;
LL powmod(LL a,LL b) {LL res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
LL gcd(LL a,LL b) { return b?gcd(b,a%b):a;}
// head
using namespace std; const int N = 1e5;
const int K = 10;
const int M = 2e5; struct abc
{
int en,w,nex;
}bian[M+10]; int n,m,k,fir[N+10],totm; LL dis[N+10][K+5]; multiset< pair<LL,pair<int,int> > > myset; multiset< pair<LL,pair<int,int> > >::iterator it; int main(){
while (n>0){
n/=2;
n++;
n--;
n/=2;
}
ios::sync_with_stdio(0),cin.tie(0);
int T;
cin >> T;
while (T--){
memset(fir,255,sizeof fir);
totm = 0;
cin >> n >> m >> k;
rep1(i,1,m){
int x,y,z;
cin >> x >> y >> z;
totm++;
bian[totm].nex = fir[x];
fir[x] = totm;
bian[totm].en = y;
bian[totm].w = z;
}
memset(dis,255,sizeof dis);
dis[1][0] = 0;
myset.insert(make_pair(0,make_pair(1,0)));
while (!myset.empty()){
pair<LL,pair<int,int> > temp = (*myset.begin());
myset.erase(myset.begin());
int x = temp.second.first,times = temp.second.second; for (int i = fir[x];i!=-1;i = bian[i].nex)
{
int y = bian[i].en;LL w = bian[i].w;
if (dis[y][times]==-1 || dis[y][times]>dis[x][times]+w){
if (dis[y][times]!=-1){
it = myset.find(make_pair(dis[y][times],make_pair(y,times)));
myset.erase(it);
}
dis[y][times] = dis[x][times]+w;
myset.insert(make_pair(dis[y][times],make_pair(y,times)));
}
if (times+1<=k && ( dis[y][times+1]==-1 || dis[y][times+1]>dis[x][times]))
{
if (dis[y][times+1]!=-1)
{
it = myset.find(make_pair(dis[y][times+1],make_pair(y,times+1)));
myset.erase(it);
}
dis[y][times+1] = dis[x][times];
myset.insert(make_pair(dis[y][times+1],make_pair(y,times+1)));
}
}
}
LL mi = dis[n][0];
for (int i = 1;i <= k;i++)
if (dis[n][i]!=-1){
mi = min(mi,dis[n][i]);
}
cout<<mi<<endl;
}
return 0;
}

【ACM-ICPC 2018 南京赛区网络预赛 L】Magical Girl Haze的更多相关文章

  1. 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 ...

  2. ACM-ICPC 2018 南京赛区网络预赛 L.Magical Girl Haze(分层最短路)

    There are N cities in the country, and M directional roads from u to v(1≤u,v≤n). Every road has a di ...

  3. ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze 最短路+分层图

    类似题解 There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v(1≤u, ...

  4. ACM-ICPC 2018 南京赛区网络预赛 - L Magical Girl Haze (分层迪杰斯特拉)

    题意:N个点,M条带权有向边,求可以免费K条边权值的情况下,从点1到点N的最短路. 分析:K<=10,用dist[i][j]表示从源点出发到点i,免费j条边的最小花费.在迪杰斯特拉的dfs过程中 ...

  5. ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze (分层dijkstra)

    There are NN cities in the country, and MMdirectional roads from uu to v(1\le u, v\le n)v(1≤u,v≤n). ...

  6. ACM-ICPC 2018 南京赛区网络预赛 L题(分层最短路)

    题目链接:https://nanti.jisuanke.com/t/31001 题目大意:给出一个含有n个点m条边的带权有向图,求1号顶点到n号顶点的最短路,可以使<=k条任意边的权值变为0. ...

  7. ACM-ICPC 2018 南京赛区网络预赛 L 【分层图最短路】

    <题目链接> 题目大意: 有N个城市,这些城市之间有M条有向边,每条边有权值,能够选择K条边 边权置为0,求1到N的最短距离. 解题分析: 分层图最短路模板题,将该图看成 K+1 层图,然 ...

  8. ACM-ICPC 2018 南京赛区网络预赛 L题(分层图,堆优化)

    题目链接: https://nanti.jisuanke.com/t/31001 超时代码: #include<bits/stdc++.h> using namespace std; # ...

  9. ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路

    https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析  分层最短路  我们建立k+1层图 层与层之间边权为0,i 向 i+1层转 ...

随机推荐

  1. Android之后台启动Activity

    在实际开发中.Activity须要启动但界面又不能显示出来,这时就须要后台启动.但又不是finish(),这时就要用到Activity中的moveTaskToBack函数,先看下官网 參数nonRoo ...

  2. 进行mysql压力測试须要注意的几点

    1.填充測试数据比物理内存还要大,至少超过innodb_buffer_pool_size 值,不能将数据所有装载到内存中,除非你的本意就想測试全内存状态下的MySQL性能. 2.每轮測试完毕后,都重新 ...

  3. HDOJ 题目3308 LCIS(线段树,区间查询,区间合并)

    LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. luogu2766 最长不下降子序列问题 DP 网络流

    题目大意:给定正整数序列x1,...,xn .(1)计算其最长不下降子序列的长度s.(不一定是否连续)(2)计算从给定的序列中最多可取出多少个长度为s的不下降子序列.(序列内每一个元素不可重复)(3) ...

  5. 一个简单的演示用的Linux字符设备驱动程序

    实现如下的功能:--字符设备驱动程序的结构及驱动程序需要实现的系统调用--可以使用cat命令或者自编的readtest命令读出"设备"里的内容--以8139网卡为例,演示了I/O端 ...

  6. 修改android手机文件权限

    修改android手机文件权限 默认情况下,一个应用肯定是读取不了另外一个应用的数据的,因为权限不够.但是我们一定要读,怎么办? 修改我们要读取文件的权限. Android是基于Linux的,所以修改 ...

  7. C Tricks(十七)—— 对角线元素的屏蔽、二维数组(矩阵)的遍历

    1. 对角线元素的屏蔽 使用 if + continue 实现对对角线元素的屏蔽 for u in range(n): for v in range(n): if u == v: continue . ...

  8. canvas的自动画图

    <!DOCTYPE HTML><html><body> <canvas id="myCanvas" width="200&quo ...

  9. SNMP简单概述

    一.SNMP简单概述 1.1.什么是Snmp SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议& ...

  10. wpf小玩意之关键字文本框

    有些时候,我们会碰到在输入文本时高亮一些文本关键字,譬如以下这图: 很明显,这个输入的文本中有四个关键字,正常文本都是黑色,关键字文本用了其他颜色.那么我们如何达到这种效果呢.wpf的textbloc ...