Pagini recente » Cod sursa (job #1481349) | Istoria paginii runda/miada2012 | Cod sursa (job #1375201) | Statistici Arghire Diana (arghirediana) | Cod sursa (job #898186)
Cod sursa(job #898186)
#include<cstdio>
#include<vector>
#include<queue>
#define DIM 32768
#define NMAX 50005
#define inf 0x3fffff
using namespace std;
char ax[DIM];
int pz,n,m,x,y,z,aux,T,s,ok,bronzarel[NMAX];
struct graf{int nod,cost;} e;
vector<graf> a[NMAX];
vector<int> d(NMAX,inf);
queue<int> Q;
inline void cit(int &x)
{x=0;
while(ax[pz]<'0'||ax[pz]>'9')
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
while(ax[pz]>='0'&&ax[pz]<='9')
{x=x*10+ax[pz]-'0';
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
}
}
void dijkstra()
{Q.push(s); d[s]=0;
while(!Q.empty())
{aux=Q.front();Q.pop();
for(unsigned int i=0;i<a[aux].size();++i)
{int wnod=a[aux][i].nod,wcost=a[aux][i].cost;
if(d[wnod]>d[aux]+wcost)
{
d[wnod]=d[aux]+wcost;
Q.push(wnod);
}
}
}
}
void scrie()
{ok=1;
for(register int i=1;i<=n;++i)
if(d[i]!=bronzarel[i]) {ok=0;break;}
if(ok==1) printf("DA\n");
else printf("NU\n");
}
int main()
{freopen("distante.in","rt",stdin); freopen("distante.out","wt",stdout);
cit(T);
for(register int i=1;i<=T;++i)
{cit(n);cit(m);cit(s);
for(register int j=1;j<=n;++j) cit(bronzarel[j]);
for(register int j=1;j<=m;++j) cit(x),cit(y),cit(z),e.nod=y,e.cost=z,a[x].push_back(e),e.nod=x,a[y].push_back(e);
dijkstra();
scrie();
}
return 0;
}