目录

最短路问题

目录

最短路问题

(最短路,反向bfs)

题目: https://i-blog.csdnimg.cn/direct/462f3fa1f76e4b0eaa247d97447aaddf.png https://i-blog.csdnimg.cn/direct/b0c1725e2a0d40afbb89d0920decea71.png https://i-blog.csdnimg.cn/direct/24bc15bf11e34f07a2297a8c8d832dc4.png 思路: bfs版本:参考自 https://i-blog.csdnimg.cn/direct/f61f5d071e254525a1e744d51767c0c8.png 代码: dijstra:

void solve()
{
int n;
cin>>n;
int s1, s2;
cin>>s1>>s2;
s1--, s2--;
vector> adj1(n), adj2(n);
int m1, m2;
cin>>m1;
vector edj1(m1);
for(int i=0, u, v; i>u>>v;
u--, v--;
if(u>v) swap(u,v);
edj1[i]={u,v};
adj1[u].emplace_back(v);
adj1[v].emplace_back(u);
}
cin>>m2;
vector edj2(m2);
for(int i=0, u, v; i>u>>v;
u--, v--;
if(u>v) swap(u,v);
edj2[i]={u,v};
adj2[u].emplace_back(v);
adj2[v].emplace_back(u);
}
vector> d(n,vector(n,1e9+7));
priority_queue,vector>,greater>> q;
for(auto [u1,v1]:edj1){
for(auto [u2,v2]:edj2){
if(u1==u2 && v1==v2){
q.push({0,u1,u1});
}
}
}
vector> vis(n,vector(n, false));
int res=-1;
while(!q.empty()){
auto [d, u1, u2]=q.top();
q.pop();
if(vis[u1][u2]) continue;
vis[u1][u2]=true;
if(u1== s1 && u2== s2){
res=d;
}
d+=abs(u1-u2);
for(auto v1:adj1[u1]){
for(auto v2: adj2[u2]){
q.push({d,v1,v2});
}
}
}
cout<>n;
int s1, s2;
cin>>s1>>s2;
s1--, s2--;
vector> adj1(n), adj2(n);
int m1, m2;
cin>>m1;
for(int i=0, u, v; i>u>>v;
u--, v--;
if(u>v) swap(u,v);
adj1[u].emplace_back(v);
adj1[v].emplace_back(u);
}
cin>>m2;
for(int i=0, u, v; i>u>>v;
u--, v--;
if(u>v) swap(u,v);
adj2[u].emplace_back(v);
adj2[v].emplace_back(u);
}
vector> dis(n,vector(n,-1));
priority_queue,vector>,greater>> q;
q.push({0,s1,s2});
int res=-1;
while(!q.empty()){
auto [d,u1,u2]=q.top();
q.pop();
if(dis[u1][u2]!=-1) continue;
dis[u1][u2]=d;
for(int v1:adj1[u1]){
for(int v2:adj2[u2]){
if(u1==u2 && v1==v2){
res=d;
cout<<res<<'\n';
return;
}
q.push({d+abs(v1-v2),v1,v2});
}
}
}
cout<<res<<'\n';
}