道路与航线

news/2024/4/27 14:54:53

一道类似缩点的好题,先按道路缩点 然后将缩点以后的图按照航线做DAG

在DAG上先跑topsort 在每一个团内部跑dijkstra,同时更新top点 很有意思的一道题目

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 3e5+10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;int n,m1,m2,st;int e[N],ne[N],w[N],h[N],idx;
void add(int a,int b,int c){e[idx] = b,ne[idx] = h[a],w[idx] = c,h[a] = idx++;
}int din[N];
int id[N];
vector<int>block[N];
bool df[N];
int cnt;
int dist[N];
bool vis[N];void dfs(int u,int ids){df[u] = true;id[u] = ids;block[ids].push_back(u);for(int i=h[u];~i;i=ne[i]){int j = e[i];if(!df[j])dfs(j,ids);} 
}
queue<int>q;
void dijkstra(int ids)
{priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>heap;for(auto &t:block[ids])heap.push({dist[t],t});while(heap.size()){auto t = heap.top();heap.pop();int ver = t.second,distance = t.first;if(vis[ver])continue;vis[ver] = true;for(int i=h[ver];~i;i=ne[i]){int j = e[i];//cout<<ver<<" "<<" "<<j<<"\n";if(dist[j]>distance+w[i]){dist[j] = dist[ver]+w[i];if(id[j]==id[ver]){heap.push({dist[j],j});}}if(id[j]!=id[ver]&&(--din[id[j]]==0))q.push(id[j]);}}}void topsort()
{for(int i=1;i<=cnt;++i)if(!din[i]){q.push(i);}memset(dist,0x3f,sizeof dist);memset(vis,0,sizeof vis); dist[st] = 0;while(q.size()){auto t = q.front();q.pop();//cout<<t<<"??\n";dijkstra(t);}}void solve()
{cin>>n>>m1>>m2>>st;memset(h,-1,sizeof h);for(int i=1;i<=m1;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(!df[i])dfs(i,++cnt);for(int i=1;i<=m2;i++){int a,b,c;cin>>a>>b>>c;add(a,b,c);din[id[b]]++;}topsort();for(int i=1;i<=n;i++)if(dist[i]>0x3f3f3f3f/2)cout<<"NO PATH\n";else cout<<dist[i]<<"\n";}signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int _;//cin>>_;_ = 1;while(_--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11191.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

搭建第一个python项目(虚拟环境)

前言 python虚拟环境类似一个虚拟机&#xff0c;主要就是在多个项目中进行一个隔离&#xff0c;防止包的版本冲突或者其他情况&#xff0c;并且在虚拟环境中pip下载包的存放路径也会只在当前项目中&#xff0c;不会放在全局安装目录中。这就是虚拟环境的优势。 python环境安装…

DC-6靶机

一.环境搭建 1.下载地址 靶机下载地址:https://download.vulnhub.com/dc/DC-6.zip 2.虚拟机配置 设置网络为nat模式&#xff0c;启动打开时&#xff0c;发现错误直接重试和点是 打开靶机虚拟机&#xff0c;如下图所示即为正常 二.开始渗透 1.信息收集 查找与攻击机&#…

HCIP —— 生成树 (下)

目录 STP&#xff08;生成树&#xff09;的角色选举 根网桥 根端口 选举规则&#xff1a; 指定端口 生成树的端口状态 STP的接口状态&#xff1a;禁用、阻塞、侦听、学习、转发 五种状态 禁用状态 阻塞状态 侦听状态 学习状态 转发状态 当生成树拓扑结构发生变化 …

鸿蒙HarmonyOS应用开发之Native与ArkTS对象绑定

场景介绍 通过napi_wrap将ArkTS对象与Native的C对象绑定&#xff0c;后续操作时再通过napi_unwrap将ArkTS对象绑定的C对象取出&#xff0c;并对其进行操作。 使用示例 接口声明、编译配置以及模块注册 接口声明 // index.d.ts export class MyObject {constructor(arg: num…

UI 测试难题!自动化识别图片的正确率如何达到100%!

摘要 在ui自动化测试领域&#xff0c;会遇到这样的情形&#xff1a;发布一张图片或上传一个头像&#xff0c;如何通过自动化测试的方式判定发布后的图片是否正确呢&#xff1f;又或者&#xff0c;我们如何通过自动化测试的方式判定某网页的某个logo是否与预期的一致呢&#xf…

【功能实现】新年贺卡(蓝桥)

题目分析&#xff1a; 想要实现一个随机抽取功能 功能拆解&#xff1a;题目给了数组&#xff0c;我们采用生成随机数的方式&#xff0c;随机数作为数组的索引值访问数组的值。 并返回获取到的值&#xff0c;将获取到的值插入到页面中。 document.addEventListener(DOMConten…