Pagini recente » Cod sursa (job #1961730) | Cod sursa (job #2283119) | Cod sursa (job #2401059) | Cod sursa (job #2094313) | Cod sursa (job #674677)
Cod sursa(job #674677)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
#define mp make_pair
#define inf 0x3f3f3f3f
vector <pair <int , int> > lista[50002];
queue <int> Q;
int n,m,v[50002],cost[50002],G,s,d[50002];
void graf(int k)
{
for(int i=1;i<=n;i++)
{
cost[i]=inf;
v[i]=0;
}
Q.push(s);
cost[s]=0;
while(!Q.empty())
{
int nod =Q.front();
for(unsigned int i=0;i<lista[nod].size();++i)
{
int nod2=lista[nod][i].first;
int c2=lista[nod][i].second;
if(cost[nod2]<=c2+cost[nod]) continue;
Q.push(nod2);
cost[nod2]=c2+cost[nod];
}
Q.pop();
}
}
int main()
{
ifstream f("distante.in");
ofstream g("distante.out");
f>>G;
for(int i=1;i<=G;i++)
{
f>>n>>m>>s;
for(int j=1;j<=n;j++)
f>>d[j];
int x,y,z;
for(int j=1;j<=m;j++)
{
f>>x>>y>>z;
lista[x].push_back(mp(y,z));
lista[y].push_back(mp(x,z));
}
graf(s);
bool ok=1;
for(int j=1;j<=n;j++)
{
if(cost[j]!=d[j]) ok=0;
lista[j].clear();
}
if(ok==0) g<<"NU\n";
else g<<"DA\n";
}
}