Pagini recente »
Cod sursă (job #818655)
|
Cod sursă (job #252360)
|
Istoria paginii runda/idkddd
|
Borderou de evaluare (job #565570)
|
Cod sursă (job #665406)
Cod sursă (job
#665406)
#import<fstream>
#import<stack>
#import<vector>
#import<algorithm>
using namespace std;
struct edge
{
int cost,to;
edge(int t,int c)
{
to=t;
cost=c;
}
};
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<edge>>a(n+1);
for(int i=0;i<m;i++)
{
int x,y;
cin>>x>>y;
a[x].push_back(edge(y,1));
a[y].push_back(edge(x,1));
}
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
a[i].push_back(edge(x,0));
}
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])
{
continue;
}
if(q.front().dist<rez[q.front().x])
{
throw("wtf bro");
}
int x=q.front().x;
q.pop_front();
for(auto &c:a[x])
{
if(rez[x]+c.cost<rez[c.to])
{
rez[c.to]=rez[x]+c.cost;
if(c.cost)
{
q.push_back(viz(c.to,rez[c.to]));
}
else
{
q.push_front(viz(c.to,rez[c.to]));
}
}
}
}
for(int i=1;i<=n;i++)
{
cout<<rez[i]<<'\n';
}
}