当前位置:网站首页>Roads and routes -- dfs+topsort+dijkstra+ mapping
Roads and routes -- dfs+topsort+dijkstra+ mapping
2022-07-05 01:07:00 【Wawa source】
Algorithm flow
1. Enter all two-way roads first , then DFS
Out all connected blocks , Calculate two arrays :id[]
Store which connected block each point belongs to ;vector<int> block[]
Store the points in each connected block :
2. Enter all routes , At the same time, the penetration of each connected block is counted .
3. Process each connected block in topological order , First, set all entries to 0
The number of the connected block of is added to the queue
in .
4. Take out the number of one connected block from the head of the team at a time bid
5. Will be block[bid]
All points in are added to the heap , Then run for all points in the heap dijkstra
Algorithm .
6. Take out the smallest point in the heap every time ver
.
7. Then traverse ver
All the neighbors of j
. If id[ver]==id[]
, So if j Can be updated , Will j
Insert into the heap : If id[ver]!= id[j]
, Will id[j]
The penetration of this connected block decreases 1
, If reduced 0
了 , Then insert it into the queue of topology sorting
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int N = 25010,M=150010,INF=0x3f3f3f3f;
typedef pair<int, int> PII;
#define x first
#define y second
int e[M],h[N],ne[M],w[M],idx=0;
int n,mr,mp,s;
int bcnt;
vector<int>block[N];
int id[N];
int din[N];
int dist[N];
bool st[N];
queue<int>q;
void add(int a, int b, int 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!=-1;i=ne[i])
{
int j=e[i];
if(!id[j])
dfs(j,bid);
}
}
void dij(int bid)
{
priority_queue<PII,vector<PII>,greater<PII> >heap;
for(auto u:block[bid])
heap.push({
dist[u],u});
while(heap.size())
{
auto t=heap.top();
heap.pop();
int ver=t.y,distance=t.x;
if(st[ver])continue;
st[ver]=true;
for(int i=h[ver];i!=-1;i=ne[i])
{
int j=e[i];
if(id[j]!=id[ver]&&--din[id[j]]==0)q.push(id[j]);
if(dist[j]>dist[ver]+w[i]){
dist[j]=dist[ver]+w[i];
if(id[j]==id[ver])heap.push({
dist[j],j});
}
}
}
}
void topsort()
{
memset(dist,0x3f,sizeof dist);
dist[s]=0;
for(int i=1;i<=bcnt;i++)
if(!din[i])
q.push(i);
while(q.size())
{
int t=q.front();
q.pop();
dij(t);
}
}
signed main()
{
memset(h, -1, sizeof h);
cin>>n>>mr>>mp>>s;
for(int i=1;i<=mr;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])
{
bcnt++;
dfs(i,bcnt);
}
for(int i=1;i<=mp;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]>INF/2)cout<<"NO PATH"<<endl;
else cout<<dist[i]<<endl;
return 0;
}
边栏推荐
- What happened to those who focused on automated testing?
- Single step debugging of master data reading of SAP commerce cloud products
- 整理混乱的头文件,我用include what you use
- Poap: the adoption entrance of NFT?
- What you learned in the eleventh week
- What if the programmer's SQL data script coding ability is weak and Bi can't do it?
- 26.2 billion! These universities in Guangdong Province have received heavy support
- Playwright之录制
- Pandora IOT development board learning (RT thread) - Experiment 4 buzzer + motor experiment [key external interrupt] (learning notes)
- Redis(1)之Redis简介
猜你喜欢
SAP UI5 应用的主-从-从(Master-Detail-Detail)布局模式的实现步骤
Implementation steps of master detail detail layout mode of SAP ui5 application
Take you ten days to easily complete the go micro service series (IX. link tracking)
【海浪建模2】三维海浪建模以及海浪发电机建模matlab仿真
Visual explanation of Newton iteration method
Arbitrum: two-dimensional cost
[STM32] (I) overview and GPIO introduction
Identifiers and keywords
【纯音听力测试】基于MATLAB的纯音听力测试系统
There is a new Post-00 exam king in the testing department. I really can't do it in my old age. I have
随机推荐
Expansion operator: the family is so separated
Database performance optimization tool
107. SAP UI5 OverflowToolbar 容器控件以及 resize 事件处理的一些细节介绍
To sort out messy header files, I use include what you use
Liangzai's first program life and annual summary in 2022
leetcode494,474
【纯音听力测试】基于MATLAB的纯音听力测试系统
SAP ui5 application development tutorial 107 - trial version of SAP ui5 overflow toolbar container control introduction
NPM install error forced installation
Daily practice (18): stack containing min function
PyTorch: In-place Operation
Paxos 入门
无心剑英译席慕容《无怨的青春》
SAP UI5 应用的主-从-从(Master-Detail-Detail)布局模式的实现步骤
There is a new Post-00 exam king in the testing department. I really can't do it in my old age. I have
How to use words to describe breaking change in Spartacus UI of SAP e-commerce cloud
Senior Test / development programmers write no bugs? Qualifications (shackles) don't be afraid of mistakes
Async/await you can use it, but do you know how to deal with errors?
【FPGA教程案例9】基于vivado核的时钟管理器设计与实现
MongoDB系列之学习笔记教程汇总