Cod sursă (job #665415)

Utilizator avatar ASN4999K Nuta Alexandru ASN4999K IP ascuns
Problemă Evacuare (lot liceu) Compilator cpp-32 | 1,38 kb
Rundă Arhiva de probleme Status evaluat
Dată 30 sept. 2022 22:44:46 Scor 100
#import<fstream>
#import<stack>
#import<vector>
#import<algorithm>
using namespace std;

struct viz
{
    int dist,x;
    viz(int a,int d)
    {
        dist=d;
        x=a;
    }
};
main()
{
    ifstream cin("evacuare.in");
    ofstream cout("evacuare.out");
    int n,m,s;
    cin>>n>>m>>s;
    vector<vector<int>>a(n+1);
    for(int i=0;i<m;i++)
    {
        int x,y;
        cin>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
    }
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        a[i].push_back(x);
    }
    for(auto &c:a)reverse(c.begin(),c.end());
    deque<viz>q;
    q.push_back(viz(s,0));
    vector<int>rez(n+1,2e9);
    rez[s]=0;
    while(!q.empty())
    {
        if(q.front().dist>rez[q.front().x])
        {
            q.pop_front();
            continue;
        }
        int x=q.front().x;
        q.pop_front();
        bool ok=0;
        for(auto &c:a[x])
        {
            if(rez[x]+1*ok<rez[c])
            {
                rez[c]=rez[x]+1*ok;
                if(ok)
                {
                    q.push_back(viz(c,rez[c]));
                }
                else
                {
                    q.push_front(viz(c,rez[c]));
                }
            }
            ok=1;
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<rez[i]<<'\n';
    }
}