多源bfs Spicy Restaurant
Posted 钟钟终
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多源bfs Spicy Restaurant相关的知识,希望对你有一定的参考价值。
Spicy Restaurant
多源bfs+一个递推
做了好多题,这道题算做的比较少的题。
#include <bits/stdc++.h>
using namespace std;
int n,m,q,cnt,head[200005],w[100005],inf,dis[100005][105];
struct node
int to,nxt;
e[200005];
void add(int u,int v)
e[++cnt].to=v;
e[cnt].nxt=head[u];
head[u]=cnt;
void bfs(int val)
queue<int>q;
for(int i=1;i<=n;i++)
if(w[i]==val)
q.push(i),dis[i][val]=0;
while(!q.empty())
int now=q.front();q.pop();
for(int i=head[now];i;i=e[i].nxt)
int j=e[i].to;
if(dis[j][val]!=inf) //判断重复访问的
continue;
dis[j][val]=dis[now][val]+1;
q.push(j);
int main()
memset(dis,0x3f,sizeof dis);
inf=dis[0][0];
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
for(int i=1;i<=m;i++)
int u,v;scanf("%d%d",&u,&v);
add(u,v);add(v,u);
for(int i=1;i<=100;i++)
bfs(i);
for(int i=1;i<=n;i++)
for(int j=1;j<=100;j++)
dis[i][j]=min(dis[i][j],dis[i][j-1]);
while(q--)
int p,a;scanf("%d%d",&p,&a);
if(dis[p][a]==inf)
printf("-1\\n");
else
printf("%d\\n",dis[p][a]);
return 0;
以上是关于多源bfs Spicy Restaurant的主要内容,如果未能解决你的问题,请参考以下文章
The 2021 Sichuan Provincial 四川省赛 L. Spicy Restaurant(多源bfs)