Mike and Shortcuts

建图跑个bfs就好了= - =

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
vector<int>v[N];
int vis[N],dis[N];
queue<int>q;
void bfs()
{
    while(q.size())
    {
        int temp=q.front();
        q.pop();
        for(int i=0;i<v[temp].size();i++)
        {
            int pos=v[temp][i];
            if(vis[pos]) continue;
            vis[pos]=1;
            q.push(pos);
            dis[pos]=dis[temp]+1;
           //            if(pos==6) cout<<temp<<' '<<dis[pos]<<endl;
        }
    }
}

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int x;
        scanf("%d",&x);
        v[i].push_back(x);
    }
    for(int i=2;i<=n;i++)
    {
        v[i].push_back(i-1);
        v[i-1].push_back(i);
    }
    q.push(1);
    dis[1]=0;vis[1]=1;
    bfs();
    for(int i=1;i<=n;i++)
    {
        printf("%d ",dis[i]);
    }puts("");
    return 0;
}
lpt的小屋 文章被收录于专栏

我想要一份甜甜的爱情

全部评论

相关推荐

八极星:有什么不能问的,(/_\),这又不是多珍贵的机会,你有什么可失去的
点赞 评论 收藏
分享
SaviorSu:直接说下学期可以请假,一般情况学校允许我26届,大三就直接去实习了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务