Pagini recente » Istoria paginii runda/trainingtsa/clasament | Cod sursa (job #1472889) | Cod sursa (job #2297681) | Cod sursa (job #1796402) | Cod sursa (job #566680)
Cod sursa(job #566680)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
#define nmax 50002
typedef struct noduri{int vec,dist;};
noduri aux;
vector <noduri> v[nmax];
queue <int> Q;
int n,m,t,S,d[nmax],l[nmax];
bool inQ[nmax];
void afisare()
{
int i;
if(d[S])
{
g<<"NU"<<'\n'; return;
}
for(S=1;S<=n;S++)
for(i=0;i<l[S];i++)
if(d[v[S][i].vec]>d[S]+v[S][i].dist)
{
g<<"NU"<<'\n';
return;
}
g<<"DA"<<'\n';
return;
}
int main()
{
f>>t;
int i;
for(;t;--t)
{
f>>n>>m>>S;
for(i=1;i<=n;i++)
{
f>>d[i];
l[i]=0;
while(!v[i].empty()) v[i].pop_back();
}
d[S]=0;
for(;m;--m)
{
f>>i>>aux.vec>>aux.dist;
v[i].push_back(aux);
}
for(i=1;i<=n;i++) l[i]=v[i].size();
afisare();
}
}