Made In Heaven 2018 沈阳赛区网络预赛 D题
求第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题的更多相关文章
- Fantastic Graph 2018 沈阳赛区网络预赛 F题
题意: 二分图 有k条边,我们去选择其中的几条 每选中一条那么此条边的u 和 v的度数就+1,最后使得所有点的度数都在[l, r]这个区间内 , 这就相当于 边流入1,流出1,最后使流量平衡 解析: ...
- ACM-ICPC 2018 沈阳赛区网络预赛 K题
题目链接: https://nanti.jisuanke.com/t/31452 AC代码(看到不好推的定理就先打表!!!!): #include<bits/stdc++.h> using ...
- ACM-ICPC 2018 沈阳赛区网络预赛 I 题 Lattice's basics in digital electronics
原题链接:https://nanti.jisuanke.com/t/31450 附上队友代码:(感谢队友带飞) #include <bits/stdc++.h> using namespa ...
- 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. ...
- 图上两点之间的第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 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 K Supreme Number(规律)
https://nanti.jisuanke.com/t/31452 题意 给出一个n (2 ≤ N ≤ 10100 ),找到最接近且小于n的一个数,这个数需要满足每位上的数字构成的集合的每个非空子集 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- 【转】软件质量之道:SourceMonitor
转:https://blog.csdn.net/feng_ma_niu/article/details/40594799 SourceMonitor是一个源代码衡量工具,由http://www.cam ...
- P1550 [USACO08OCT]打井Watering Hole
题目描述 Farmer John has decided to bring water to his N (1 <= N <= 300) pastures which are conven ...
- MSF里MS17_010利用模块笔记
1. auxiliary/scanner/smb/smb_ms17_010 //扫描检测漏洞辅助模块 扫描结果这里可以看到 2,3,4这几台主机存在此漏洞! 2. auxilia ...
- Windows下TeX Live + Sublime Text 3 + Sumatra PDF配置
本文写给我的师弟们,如何自己动手配置LaTeX环境(通过LeX Live + Sublime Text 3 + Sumatra PDF). 1.TeX Live 配置 首先从TeX Live 下载IS ...
- VS与Opencv的亲密接触之安装配置过程
最近想把FPGA采集的图像,上传到上位机显示,看到Opencv能帮大忙,所以就折腾折腾! 我用的是VS2012和opencv-2.4.10-2.4.10(目前的最新版本),那个版本无所谓,本文都将适用 ...
- ucosii笔记(一)
.ucosii是按照优先级高低来切换任务执行顺序的抢占式实时系统. 2.在被高优先级的任务抢占时,这个任务会将寄存器的数据(xPSR.PC.LR.R0.R1.R2.R3.R12等的值)存放在该任务自己 ...
- Qt 的线程与事件循环
Qt 的线程与事件循环
- Dynamics 365 支持使用Web Api 通过名称来检索元数据
关键检索元数据我在之前的一篇博文中稍有提及,当时是为了取实体的picklist字段的属性,但当时的版本只支持通过metadataid检索,而在365中又增加了名称的检索,方便了很多. 本篇依旧用之前博 ...
- 设计模式 笔记 适配器模式 Adapter
//---------------------------15/04/13---------------------------- //Adapter 适配器模式 ----类对象结构型模式 /* 1: ...
- More Effective C++ Item14:明智运用exception specifications
使用exception specifications你必须非常仔细去确保,函数调用的子函数.注册的回调函数不会违背约定.而设计模板内部的异常更难确保. 设计回调机制的时候,如果调用方规定了不抛出异常, ...