Pagini recente »
Borderou de evaluare (job #296952)
|
oji10
|
Borderou de evaluare (job #573886)
|
Borderou de evaluare (job #152011)
|
Cod sursă (job #665415)
Cod sursă (job
#665415)
#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';
}
}