大致题意:
    给定一个n个点m条边的图,在可以把路径上至多k条边的权值变为0的情况下,求S到T的最短路。

数据规模: N≤100000,M≤200000,K≤10

建一个立体的图,有k层,每一层是一份原图,消耗一次把一条边权值变为0的机会 = 在立体图中升一层

然后跑堆优化dij就好了,会卡spfa。

AC代码:

#include<cstdio>
#include<queue>
#include<cstring>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int MAXN=;
const int MAXM=;
typedef pair<long long,pair<int,int> > pii;
priority_queue<pii,vector<pii>,greater<pii> > q;
bool visit[MAXN][];
int pointer[MAXN];
long long d[MAXN][];
int n,m,k,tot=,S,T;
const long long INF=1e17;
struct Edge
{
int to,next;
long long w;
Edge() {};
Edge(int b,int nxt,int weight) {to=b,next=nxt,w=weight;}
}edge[MAXM];
inline void addedge(int a,int b,int w1)
{
edge[tot]=Edge(b,pointer[a],w1);
pointer[a]=tot++;
}
void dijkstra()
{
rep(i,S,T) rep(z,,k) d[i][z]=INF;
d[S][]=;
memset(visit,,sizeof(visit));
q.push(make_pair(d[S][],make_pair(S,)));
while(!q.empty())
{
pii u=q.top();q.pop();
int x=u.second.first,stp=u.second.second;
if(visit[x][stp]) continue;
visit[x][stp]=;
for(int j=pointer[x];j!=-;j=edge[j].next)
{
int &v=edge[j].to;
if(d[v][stp]>d[x][stp]+edge[j].w)
{
d[v][stp]=d[x][stp]+edge[j].w;
q.push(make_pair(d[v][stp],make_pair(v,stp)));
}
if(stp<k&&d[v][stp+]>d[x][stp])
{
d[v][stp+]=d[x][stp];
q.push(make_pair(d[v][stp+],make_pair(v,stp+)));
}
}
}
}
void init()
{
tot=;
memset(pointer,-,sizeof(pointer));
}
void Input()
{
scanf("%d%d%d",&n,&m,&k);
int u,v;
long long w;
rep(i,,m)
{
scanf("%d%d%lld",&u,&v,&w);
addedge(u,v,w);
}
S=;T=n;
}
int main()
{
//freopen("in.txt","r",stdin);
int TT;
scanf("%d",&TT);
rep(tt,,TT)
{
init();
Input();
dijkstra();
long long ans=INF;
rep(i,,k) ans=min(ans,d[n][i]);
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. MailKit---获取邮件
  2. 2016年12月30日 星期五 --出埃及记 Exodus 21:25
  3. Java EE 参考文档及sample
  4. Spring 中注入 properties 中的值
  5. 将Excel文件.xls导入SQL Server 2005
  6. java.lang.NoClassDefFoundError: JspException
  7. jquery ajax获取和解析数据
  8. Hive学习之六 《Hive进阶— —hive jdbc》 详解
  9. WLAN和WIFI的区别
  10. 计算机网络课程优秀备考PPT之第七章应用层(七)
  11. 201521123008《Java程序设计》第10周学习总结
  12. 轨迹系列——Socket总结及实现基于TCP或UDP的809协议方法
  13. (3)Deep Learning之神经网络和反向传播算法
  14. css3 翻牌动画
  15. Loj #2731 「JOISC 2016 Day 1」棋盘游戏
  16. python中可变参数和关键字参数总结
  17. day03 变量 运算符 基本数据类型 输出功能 格式化输出
  18. JDK8漫谈——代码更优雅
  19. P3455 [POI2007]ZAP-Queries(莫比乌斯反演)
  20. STM32的TAMPER-RTC管脚作为Tamper的使用[转]

热门文章

  1. 安装cmake 和 opencv 4.0.0
  2. 版本管理工具Git(2)git的使用
  3. 如何安全的捂住你的AngelToken钱包
  4. python修炼第五天
  5. 使用eclipse新建一个c项目
  6. OpenStack的容器服务体验
  7. 关于memset函数--赋最大值
  8. const修饰指针+volatile +restrict
  9. shell脚本中给字符串添加颜色
  10. vue 特点