求第k短路

模板题 套模板即可

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue> using namespace std; const int maxn=;
const int maxe=; struct State{
int f; // f=g+dis dis表示当前点到终点的最短路径,即之前的预处理
int g; //g表示到当前点的路径长度
int u;
bool operator<(const State b)const{
if(f==b.f)return g>b.g;
return f>b.f;
}
};
struct Edge{
int v;
int w;
int next;
}edge[maxe],reedge[maxe];
int head[maxn],rehead[maxn];
int dis[maxn],vis[maxn];
int n,m;
int cot;
int s,t,k; void init(){
cot=; //cot代表边的id 每条边的id都不相同
memset(head,-,sizeof(head));
memset(rehead,-,sizeof(rehead));
} void addedge(int u,int v,int w){
edge[cot].v=v;
edge[cot].w=w;
edge[cot].next=head[u];//记录上一次u的id是多少 这样方便遍历 初始值为-1
head[u]=cot;//head[u] 给这个u标记上独一无二的id
reedge[cot].v=u;
reedge[cot].w=w;
reedge[cot].next=rehead[v];
rehead[v]=cot++;
} void SPFA(){
queue<int>q;
memset(vis,,sizeof(vis));
memset(dis,-,sizeof(dis));
int u,v;
q.push(t);
vis[t]=true;//vis表示当前点是否在队列
dis[t]=;
while(!q.empty()){
u=q.front();
q.pop();
vis[u] = ;
//rehead[u] 是u最后一次出现的id reedge[i].ne 代表第i次出现的边上一次出现的id
for(int i=rehead[u];~i;i=reedge[i].next){ //~i取反 当i为-1时正好取反为0 退出for
v=reedge[i].v;
if(dis[v]>dis[u]+reedge[i].w || dis[v]==-){
dis[v]=dis[u]+reedge[i].w;
if(!vis[v]){
q.push(v);
vis[v]=;
}
}
}
}
} int Astart(){
if(s==t)k++;
if(dis[s]==-)return -;
int cnt=;
priority_queue<State>q; // 优先队列
State a,b;
a.g=;
a.u=s;
a.f=a.g+dis[a.u];
q.push(a);
while(!q.empty()){
b=q.top();
q.pop();
if(b.u==t){
cnt++;
//printf("%d %d %d %d\n",b.f,b.g,b.u,dis[b.u]);
if(cnt==k)return b.g;
}
for(int i=head[b.u];~i;i=edge[i].next){
a.g=b.g+edge[i].w;
a.u=edge[i].v;
a.f=a.g+dis[a.u];
q.push(a);
}
}
return -;
} int main()
{
int u,v,w,T;
while(scanf("%d%d",&n,&m)==){
init();
scanf("%d%d%d%d",&s,&t,&k, &T); //起点 终点 第k条 时间T
for(int i=;i<m;i++){
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
}
SPFA(); if (Astart() <= T && Astart() != -) //小于等于T 并且有路才可以
printf("yareyaredawa\n");
else printf("Whitesnake!\n");
}
return ;
}

Made In Heaven 2018 沈阳赛区网络预赛 D题的更多相关文章

  1. Fantastic Graph 2018 沈阳赛区网络预赛 F题

    题意: 二分图 有k条边,我们去选择其中的几条 每选中一条那么此条边的u 和 v的度数就+1,最后使得所有点的度数都在[l, r]这个区间内 , 这就相当于 边流入1,流出1,最后使流量平衡 解析: ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛 K题

    题目链接: https://nanti.jisuanke.com/t/31452 AC代码(看到不好推的定理就先打表!!!!): #include<bits/stdc++.h> using ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛 I 题 Lattice's basics in digital electronics

    原题链接:https://nanti.jisuanke.com/t/31450 附上队友代码:(感谢队友带飞) #include <bits/stdc++.h> using namespa ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛-D:Made In Heaven(K短路+A*模板)

    Made In Heaven One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. ...

  5. 图上两点之间的第k最短路径的长度 ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven

    131072K   One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. Howe ...

  6. ACM-ICPC 2018 沈阳赛区网络预赛 K Supreme Number(规律)

    https://nanti.jisuanke.com/t/31452 题意 给出一个n (2 ≤ N ≤ 10100 ),找到最接近且小于n的一个数,这个数需要满足每位上的数字构成的集合的每个非空子集 ...

  7. ACM-ICPC 2018 沈阳赛区网络预赛-K:Supreme Number

    Supreme Number A prime number (or a prime) is a natural number greater than 11 that cannot be formed ...

  8. ACM-ICPC 2018 沈阳赛区网络预赛 J树分块

    J. Ka Chang Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero p ...

  9. ACM-ICPC 2018 沈阳赛区网络预赛 K. Supreme Number

    A prime number (or a prime) is a natural number greater than 11 that cannot be formed by multiplying ...

随机推荐

  1. P1522 牛的旅行 Cow Tours

    题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...

  2. rpm yum apt-get redhat centos ubuntu

    rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装.查询.卸载.升级等工作.但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时.Yum(全称为 Y ...

  3. jquery方法简单记录

      append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - 在被选元素之前插入内容 firs ...

  4. Linux学习笔记(第十一章)

    文件系统及程序资源的配置ulimit: 环境变量: bash变量 alias设定变量别名 设定别名 取消别名 指令执行顺序 组合键 通配符 数据流重导向 多指令 以下命令都需用管道符链接: 截取命令: ...

  5. Django Rest Framework源码剖析(一)-----认证

    一.简介 Django REST Framework(简称DRF),是一个用于构建Web API的强大且灵活的工具包. 先说说REST:REST是一种Web API设计标准,是目前比较成熟的一套互联网 ...

  6. C语言学习之联合类型

    前言 联合(union)是一种特殊的数据类型,和结构体很像,结构体各成员变量有自己独立的存储位置,而联合的成员变量共享同一片存储区域,因此联合变量再一个时刻只能保存它的某一个成员的值. 联合的定义和初 ...

  7. PowerBI开发 第八篇:查询参数

    在PowerBI Desktop中,用户可以定义一个或多个查询参数(Query Parameter),参数的功能是为了实现PowerBI的参数化编程,使得Data Source的属性.替换值和过滤数据 ...

  8. Docker GitHub 网站中 Readme.md 以技术者的角度翻译

    Docker 是一个开源的轻量级容器项目,用于让你的应用在它上面打包.集装和运行.Docker 运行的环境既包含未知硬件也包含未知操作系统.这句话的意思是它可以运行在任何地方,小到你的笔记本大到一个大 ...

  9. stl源码剖析 详细学习笔记deque(3)

    protected: typedef simple_alloc<value_type,Alloc> data_allocator; //用来配置元素的alloc typedef simpl ...

  10. 在Microsoft Dynamic 365/2016环境使用LinqPad查询数据(不使用linqpad Microsoft Dynamic 365 Driver)

    在Microsoft Dynamic 365/2016环境使用LinqPad查询数据 老规矩,先上效果图: 实体集合: 实体属性: 属性值:  查询出的结果可以导出的格式: 操作步骤: 1.下载Lin ...