道路与航线

news/2024/10/15 14:21:25/

题目

代码

#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef pair<int, int> PII;
const int N = 25e3+10, M = 15e4+10;
const int inf = 0x3f3f3f3f; 
int h[N], e[M], ne[M], idx, w[M];
int id[N], bcnt;
vector<int> block[N];
int in[N];
int dist[N];
bool st[N];
int n, r, p, s;
queue<int> q;
void add(int a, int b, int c)  // 添加一条边a->b,边权为c
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}
void dfs(int u, int bid)
{id[u] = bid, block[bid].push_back(u);for(int i = h[u]; ~i; i = ne[i]){int j = e[i];if(!id[j]) dfs(j, bid);}
}
void dijkstra(int bid)
{priority_queue<PII, vector<PII>, greater<PII>> hp;for(auto c : block[bid])hp.push({dist[c], c}); //全部压入的原因是要找出块内(Dijkstra的范围)dist最小的点while(hp.size()){int u = hp.top().y; hp.pop();if(st[u]) continue;st[u] = true;for(int i = h[u]; ~i; i = ne[i]){int j = e[i];if(dist[j] > dist[u] + w[i]){dist[j] = dist[u] + w[i];if(id[u] == id[j]){hp.push({dist[j], j});}}if(id[u] != id[j] && --in[id[j]] == 0) q.push(id[j]); //注意这一步要在上面的 if 外头}}
}
void topsort()
{memset(st, 0, sizeof st);memset(dist, 0x3f, sizeof dist);dist[s] = 0;for(int i = 1; i <= bcnt; i++){if(in[i] == 0) q.push(i);}while(q.size()){int u = q.front(); q.pop();dijkstra(u);}
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cin >> n >> r >> p >> s;memset(h, -1, sizeof h);for(int i = 1; i <= r; i++){int a, b, c;cin >> a >> b >> c;add(a, b, c);add(b, a, c);}for(int i = 1; i <= n; i++){if(!id[i]){dfs(i, ++bcnt);}}for(int i = 1; i <= p; i++){int a, b, c;cin >> a >> b >> c;add(a, b, c);in[id[b]]++;}topsort();for(int i = 1; i <= n; i++){if(dist[i] > inf / 2) cout << "NO PATH\n";else cout << dist[i] << '\n';}
}


http://www.ppmy.cn/news/1539466.html

相关文章

grafana version 11.1.0 设置Y轴刻度为1

grafana 版本 # /usr/share/grafana/bin/grafana --version grafana version 11.1.0设置轴 Axis 搜索 Standard options 在"Decimals"中输入0&#xff0c;确保只显示整数

还傻傻分不清AI和AIGC的区别吗?一篇文章告诉你

AIGC是什么 AIGC&#xff0c;即人工智能生成内容&#xff08;Artificial Intelligence Generated Content&#xff09;&#xff0c;是利用人工智能技术自动生成人类可消费内容的一种新型内容生产方式。它涵盖了自然语言处理&#xff08;NLP&#xff09;、计算机视觉&#xff0…

一些流行的 Java HTTP 客户端库的优缺点对比

1. Apache HttpClient 优点&#xff1a; 功能完善&#xff0c;适用于多种复杂的 HTTP 请求场景。支持 HTTP/1.1 和 HTTP/2&#xff0c;以及线程安全的连接管理。内置重试机制和高效的连接池管理。丰富的配置选项&#xff0c;适合高级用户。 缺点&#xff1a; API 相对较复杂…

Dbt增量策略模型实践指南

参考&#xff1a;dbt Incremental Strategies | Indicium Engineering (medium.com) 本文讨论dbt的增量策略&#xff0c;介绍工作原理、以及各自优缺点。下篇讲解如何在模型中实现增量策略。 使用增量模型可以仅仅处理最近的数据&#xff0c;减少数据处理成本和时间。当然首先要…

nginx反向代理下的长连接

一、nginx使用场景 大型应用架构中&#xff0c;一般会使用nginx反向代理&#xff0c;分为三层&#xff1a; 1.调用层&#xff0c;浏览器或APP&#xff1b; 2.中间层&#xff0c;反向代理nginx&#xff1b; 3.服务层&#xff0c;server一般是apche、tomcat 请求调用过程&…

Redis主从复制机制详解

目录 一、主从复制介绍二、搭建主从复制三、主从复制流程四、关于Replication ID五、主从复制核心知识六、主从复制应用场景七、主从复制的注意事项八、读写分离实战 一、主从复制介绍 1、什么是主从复制&#xff1f; 2、为什么要使用主从复制&#xff1f; redis-server单点…

无mac电脑在苹果开发者上传构建版本

我们登录苹果开发者网站的后台&#xff0c;进入app store后&#xff0c;发现上架的页面需要上传一个构建版本。 这个构建版本的意思就是我们的应用二进制文件&#xff0c;是上架最重要的文件。但是在苹果开发者后台是无法直接上传这个文件的&#xff0c;它提示我们可以使用xco…

Android App系统签名

1.在AndroidManifest中添加 android:sharedUserId"android.uid.system" 2.获取系统签名 把以下所有文件放入同一个文件夹命名为sign 在Android系统源码中的\build\target\product\security目录下找到platform.x509.pem 和 platform.pk8两个文件&#xff1b; 在out/…