Codeforces Round #361 (Div. 2)B. Mike and Shortcuts【BFS】

来源:互联网 发布:淘宝4星怎么贷款 编辑:程序博客网 时间:2024/05/17 09:04

没有考虑到问题的本质,自己最初写的是最暴力的搜索,其实只是对左右两点和最短路上的点有关系。

#include<bits/stdc++.h>using namespace std;const int N=200000+10;int n,a[N],use[N],ans[N];vector<int>g[N];int main(){    while(~scanf("%d",&n))    {        for(int i=0;i<=n;i++) g[i].clear();        for(int i=1;i<=n;i++)        {            scanf("%d",a+i);            g[i].push_back(a[i]);            if(i!=n) g[i].push_back(i+1);            if(i!=1) g[i].push_back(i-1);        }        memset(ans,0xff,sizeof(ans));        queue<int>q;        q.push(1);        ans[1]=0;        while(!q.empty())        {            int k=q.front();            q.pop();            for(int i=0;i<g[k].size();i++)            {                int y=g[k][i];                if(ans[y]==-1||ans[y]>ans[k]+1)                {                    ans[y]=ans[k]+1;                    q.push(y);                }            }        }        for(int i=1;i<=n;i++)            printf("%d ",ans[i]);        printf("\n");    }    return 0;}
0 0
原创粉丝点击