当前位置:网站首页>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;
}
边栏推荐
- 程序员SQL数据脚本编码能力弱,BI做不出来怎么办?
- Parameter passing mechanism of member methods
- 那些一门心思研究自动化测试的人,最后都怎样了?
- Playwright之录制
- 如果消费互联网比喻成「湖泊」的话,产业互联网则是广阔的「海洋」
- How to use words to describe breaking change in Spartacus UI of SAP e-commerce cloud
- [development of large e-commerce projects] performance pressure test - Performance Monitoring - heap memory and garbage collection -39
- Huawei employs millions of data governance experts! The 100 billion market behind it deserves attention
- [flutter topic] 64 illustration basic textfield text input box (I) # yyds dry goods inventory #
- 4. Scala writes HelloWorld in idea, in-depth analysis of accompanying objects, and association of source packages
猜你喜欢
Operator explanation
[wave modeling 3] three dimensional random real wave modeling and wave generator modeling matlab simulation
What happened to those who focused on automated testing?
SAP ui5 application development tutorial 107 - trial version of SAP ui5 overflow toolbar container control introduction
A simple SSO unified login design
Applet live + e-commerce, if you want to be a new retail e-commerce, use it!
Playwright之录制
4. Scala writes HelloWorld in idea, in-depth analysis of accompanying objects, and association of source packages
There is a new Post-00 exam king in the testing department. I really can't do it in my old age. I have
【大型电商项目开发】性能压测-优化-中间件对性能的影响-40
随机推荐
Compare whether two lists are equal
[Yocto RM]11 - Features
各大主流编程语言性能PK,结果出乎意料
[wave modeling 3] three dimensional random real wave modeling and wave generator modeling matlab simulation
Grabbing and sorting out external articles -- status bar [4]
无心剑英译席慕容《无怨的青春》
Playwright之录制
Basic operation of database and table ----- the concept of index
The difference between string STR and new string
[microprocessor] VHDL development of microprocessor based on FPGA
Research Report on the overall scale, major producers, major regions, products and application segmentation of agricultural automatic steering system in the global market in 2022
Daily question brushing record (13)
【海浪建模3】三维随机真实海浪建模以及海浪发电机建模matlab仿真
The most complete regular practical guide of the whole network. You're welcome to take it away
Basic operation of database and table ----- phased test II
资深测试/开发程序员写下无bug?资历(枷锁)不要惧怕错误......
每日刷题记录 (十三)
SAP UI5 应用开发教程之一百零七 - SAP UI5 OverflowToolbar 容器控件介绍的试读版
Parameter passing mechanism of member methods
Robley's global and Chinese markets 2022-2028: technology, participants, trends, market size and share Research Report