技术标签: 图论
给定一个有 n 个点,m 条边的有向带权图,求 s 到 t 的第 k 短路。(n, k <= 1e3, m <= 1e5)
https://vjudge.net/problem/POJ-2449
k 短路练手,注意特判 s == t 。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define pb push_back
#define sz(a) ((int)a.size())
#define mem(a, b) memset(a, b, sizeof a)
#define lson (rt << 1)
#define rson (rt << 1 | 1)
#define gmid (l + r >> 1)
const int maxn = 1e3 + 5;
const int maxm = 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
struct Node{
int ls, rs, dis, val, to;
} tr[maxm];
vector<pii> G1[maxn], G2[maxn];
priority_queue<pii, vector<pii>, greater<pii> > q;
int dis[maxn], fa[maxn], rt[maxn];
int n, m, sp, tp, k, tot;
int merge(int x, int y, int f){
if(!x || !y) return x + y;
if(tr[x].val > tr[y].val) swap(x, y);
if(f) tr[++tot] = tr[x], x = tot;
tr[x].rs = merge(tr[x].rs, y, f);
if(tr[tr[x].ls].dis < tr[tr[x].rs].dis) swap(tr[x].ls, tr[x].rs);
tr[x].dis = tr[tr[x].rs].dis + 1;
return x;
}
void init(){
for(int i = 1; i <= n; ++i) G1[i].clear(), G2[i].clear();
for(int i = 1; i <= n; ++i) fa[i] = rt[i] = 0;
while(!q.empty()) q.pop();
tot = 0;
}
void dij(int s, vector<pii> G[]){
for(int i = 1; i <= n; ++i) dis[i] = inf;
dis[s] = 0, q.push({
dis[s], s});
while(!q.empty()){
int u = q.top().second, d = q.top().first; q.pop();
if(d != dis[u]) continue;
for(int i = 0; i < sz(G[u]); ++i){
int v = G[u][i].second, w = G[u][i].first;
if(dis[v] > dis[u] + w){
dis[v] = dis[u] + w;
q.push({
dis[v], v});
}
}
}
}
void build(vector<pii> G[]){
for(int u = 1; u <= n; ++u){
if(dis[u] == inf) continue;
for(int i = 0; i < sz(G[u]); ++i){
int v = G[u][i].second, w = G[u][i].first;
if(dis[u] == dis[v] + w && !fa[u]) fa[u] = v;
else if(dis[v] != inf){
tr[++tot] = {
0, 0, 0, dis[v] + w - dis[u], v};
rt[u] = merge(rt[u], tot, 0);
}
}
q.push({
dis[u], u});
}
while(!q.empty()){
int u = q.top().second; q.pop();
if(fa[u]) rt[u] = merge(rt[u], rt[fa[u]], 1);
}
}
int solve(){
dij(tp, G2); build(G1);
if(sp == tp) ++k;
if(!rt[sp]) return -1;
if(k == 1) return dis[sp];
int res = k - 1;
q.push({
tr[rt[sp]].val, rt[sp]});
while(!q.empty()){
int u = q.top().second, d = q.top().first; q.pop();
if(--res == 0) return dis[sp] + d;
if(int v = tr[u].ls) q.push({
d - tr[u].val + tr[v].val, v});
if(int v = tr[u].rs) q.push({
d - tr[u].val + tr[v].val, v});
if(int v = rt[tr[u].to]) q.push({
d + tr[v].val, v});
}
return -1;
}
int main(){
// ios::sync_with_stdio(0); cin.tie(0);
while(scanf("%d%d", &n, &m) != EOF){
init();
for(int i = 1; i <= m; ++i){
int u, v, w; scanf("%d%d%d", &u, &v, &w);
G1[u].pb({
w, v}), G2[v].pb({
w, u});
}
scanf("%d%d%d", &sp, &tp, &k);
int ret = solve();
printf("%d\n", ret);
}
return 0;
}
以下部分内容转自:https://blog.csdn.net/jiatingqiang/article/details/7481497反汇编调试内核驱动arm-none-linux-gnueabi-objdump -S kmod-demo1.o > a.txt什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"O...
安装ftp客户端及服务端都需安装[[email protected] etc]# yum install vsftpd -y (服务端)[[email protected] ~]# yum install lftp -y (客户端)将lftp服务加入列表[[email protected] etc]# systemctl start vsftpdvsftpd@ vsftpd....
abc1aaa-bbb-bbb232vvv-nnnn243qqq-www-wwww12变成如下形式:ab1b2b3c1aaabbbbbb232vvvnnnn243qqqwwwwwww12我要mssql版本的别给我Mysql和Oracle的mysql>select*fromt_fengchujun;+---...a b c1 ...
作者:李誉辉四川大学在读研究生前言这是shinydashboard与shiny_史上最全第四篇,也是最后一篇。前文回顾:shinydashboard与shiny_史上...
1.准备好素描纸的素材和人物照片素材2.用PS打开人物素材,同时ctrl+J复制图层3.去色:ctrl+U把饱和度调到最低,然后ctrl+j复制图层,按ctrl+I反相操作4.将图层的混合模式改为颜色减淡5.点击滤镜-》其他-》最小值,数值设置为2(参考值)6.鼠标右键图层,混合选项,按住ALT键调整下一图层小滑块至头发纹路相对清晰。参考值0-707.将第一第二两图层按CT
http://poj.org/problem?id=2449根据A*f(p)=g(p)+h(p)g(p)就是p点到s点最短距离h(p)就是p点到t点的距离h(p)的求法就是将边反过来求一遍单源最短路即可。为什么要用A*?A*的作用就是将普通的bfs变得更加智能,我们可以通过改变h函数来达到我们希望的效果。这道题,我们要求第K短路,那么怎么去求呢。思路就是利用A*,将较短的路径上的点放在前面去跑。这...
大家好,今天给大家介绍基于java+JavaBean+jsp的网上零食销售系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。文章目录:项目难度:中等难度适用场景:相关题目的毕业设计配套论文字数:9814个字34页包含内容:整套源码+完整毕业论文+答辩PPT+任务书+辅导视频+运行截图资源文件目录简图如下:提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。绪 论省略JSP是一种动态的以网页为平台的开发技术,它具备很好的兼容性,可以引用JSP中自带的标签将Java代
一、概述。java.swing.JColorChooser(颜色选择器)用于颜色的选择、编辑等操作。二、常用方法。1.public JColorChooser() : 构造器,创建一个默认初始颜色为白色的颜色选择器。2.public JColorChooser( Color initalColor) : 构造器,创建一个初始颜色为initColor的颜色选择器。3.public...
设置Serv-U FTP 支持被动模式连接一大早被朋友说ftp始终连不上去,我自己去掉被动模式就可以连接。这个问题困扰了 我好长时间,是下面这篇文章解决了它。特在这里留个备份。我的问题是没有进行相应的端口设置。 设置支持被动(PASV)模式连接: 本地服务器--》设置--》高级--》PASV 端口范围--》写上范围,听说得写上4000以后的,可以写上5000-5005--》FTP设置完毕 进入本地...
数据集 图片简介这项任务是预测树叶图像的类别。该数据集包含176个类别,18353幅图像。每个类别至少有50幅图像用于训练。图片样品代码实现引入相关类库import pandas as pdimport tensorflow as tfimport matplotlib.pyplot as plt使用pandas读取csv文件,csv有两列,一列是图片位置,另一列是对应的标签。df = pd.read_csv('../input/classify-l...
云服务器的销售员好做吗 内容精选换一换云服务器列表页面,云服务器的状态显示为“初始化”且超过15分钟没有变化。创建云服务器时,设置的委托权限有误。如果创建云服务器时已注入脚本,请查看创建云服务器时选择的委托权限是否正确。登录控制台,选择“计算 > 弹性云服务器”。在云服务器列表页,单击云服务器名称。查看云服务器详情。云服务器列表查看云服务器详情。云服务器列表在“基本信息 >挂载有NVM...
点击上方“AI算法修炼营”,选择“星标”公众号精选作品,第一时间送达本文收录于CVPR2020,是华为诺亚方舟研究院的成果,主要解决的是,去除对数字屏幕拍照产生摩尔纹,有一定的应用价值。...