当前位置:网站首页>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;
}
边栏推荐
- Daily question brushing record (13)
- [wave modeling 1] theoretical analysis and MATLAB simulation of wave modeling
- Complete knapsack problem (template)
- 无心剑英译席慕容《无怨的青春》
- Global and Chinese market of optical densitometers 2022-2028: Research Report on technology, participants, trends, market size and share
- Introduction to the gtid mode of MySQL master-slave replication
- 全栈开发提效神器——ApiFox(Postman + Swagger + Mock + JMeter)
- Inventory of more than 17 typical security incidents in January 2022
- Pandora IOT development board learning (RT thread) - Experiment 4 buzzer + motor experiment [key external interrupt] (learning notes)
- SAP ui5 application development tutorial 107 - trial version of SAP ui5 overflow toolbar container control introduction
猜你喜欢

华为百万聘请数据治理专家!背后的千亿市场值得关注

Huawei employs millions of data governance experts! The 100 billion market behind it deserves attention

Basic concept and usage of redis
![[flutter topic] 64 illustration basic textfield text input box (I) # yyds dry goods inventory #](/img/1c/deaf20d46e172af4d5e11c28c254cf.jpg)
[flutter topic] 64 illustration basic textfield text input box (I) # yyds dry goods inventory #

What happened to those who focused on automated testing?

Playwright之录制

The performance of major mainstream programming languages is PK, and the results are unexpected

【海浪建模3】三维随机真实海浪建模以及海浪发电机建模matlab仿真

多模输入事件分发机制详解

整理混乱的头文件,我用include what you use
随机推荐
Playwright之录制
“薪资倒挂”、“毕业生平替” 这些现象说明测试行业已经...
Sorting selection sorting
RB technology stack
【海浪建模1】海浪建模的理论分析和matlab仿真
资深测试/开发程序员写下无bug?资历(枷锁)不要惧怕错误......
Query for Boolean field as "not true" (e.g. either false or non-existent)
SAP UI5 应用的主-从-从(Master-Detail-Detail)布局模式的实现步骤
Complete knapsack problem (template)
ROS command line tool
[wave modeling 2] three dimensional wave modeling and wave generator modeling matlab simulation
Discrete mathematics: reasoning rules
What if the programmer's SQL data script coding ability is weak and Bi can't do it?
Global and Chinese market of veterinary thermometers 2022-2028: Research Report on technology, participants, trends, market size and share
无心剑英译席慕容《无怨的青春》
Liangzai's first program life and annual summary in 2022
Are you still writing the TS type code
The most complete regular practical guide of the whole network. You're welcome to take it away
Redis master-slave replication cluster and recovery ideas for abnormal data loss # yyds dry goods inventory #
Daily practice (18): stack containing min function