多源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)

gym103117L. Spicy Restaurant

多源bfs

[多源bfs] aw173. 矩阵距离(多源bfs+模板题)

CF 986A Fair——多源bfs

多源bfs