Pagini recente » Cod sursa (job #3141995) | Cod sursa (job #2240194) | Cod sursa (job #2791303) | Cod sursa (job #809172) | Cod sursa (job #732202)
Cod sursa(job #732202)
/*#include<iostream>
#include<fstream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
#define maxn 50010
#define maxm 100010
#define inf 1000000000
#define pb push_back
#define mp make_pair
ifstream in("distante.in");
ofstream out("distante.out");
struct muchie
{
long a,b,c;
} e[maxm];
long t,i,j,m,n,cost[maxn],f[maxn],c[maxn],k,s;
vector <long> v[maxn];
vector < pair<long,long> > h;
void init(long nod_sursa)
{
cost[nod_sursa]=0;
for(i=1;i<=n;i++)
if(i!=nod_sursa)
cost[i]=inf;
for(i=1;i<=n;i++)
f[i]=0;
h.clear();
h.pb(mp(0,nod_sursa));
make_heap(h.begin(),h.end());
}
void bmf(long m, long n)
{
pair<long,long> per;
long nod,poz;
long long pas=0;
while(h.size() && pas<=1LL*m*n){
++pas;
pop_heap(h.begin(),h.end());
per=h.back();
h.pop_back();
nod=per.second;
f[nod]=0;
for(j=0;j<v[nod].size();j++){
poz=v[nod][j];
if(cost[e[poz].a]+e[poz].c<cost[e[poz].b]){
cost[e[poz].b]=cost[e[poz].a]+e[poz].c;
if(!f[e[poz].b]){
f[e[poz].b]=1;
h.pb(mp(-cost[e[poz].b],e[poz].b));
push_heap(h.begin(),h.end());
}
}
}
}
}
int main()
{
char ok;
in>>t;
for(k=1;k<=t;k++){
ok=1;
in>>n>>m>>s;
for(i=1;i<=n;i++)
in>>c[i];
for(i=1;i<=m;i++){
in>>e[i].a>>e[i].b>>e[i].c;
v[e[i].a].pb(i);
}
init(s);
bmf(m,n);
for(i=1;i<=m;i++)
v[i].clear();
/*for(i=1;i<h.size();i++)
out<<h[i].first<<" "<<h[i].second<<" ";
for(i=1;i<=n;i++)
/*if(cost[i]!=c[i]){
ok=0;
break;
}
out<<cost[i]<<" ";
if(ok)
out<<"DA\n";
else
out<<"NU\n";
}
return 0;
}*/
#include<iostream>
#include<fstream>
using namespace std;
#define maxn 50010
ifstream in("distante.in");
ofstream out("distante.out");
long i,m,n,t,sol[maxn],a,b,c,s;
int main()
{
char ok;
in>>t;
while(t--){
ok=1;
in>>n>>m>>s;
for(i=1;i<=n;i++)
in>>sol[i];
if(sol[s]) ok=0;
while(m--){
in>>a>>b>>c;
if(sol[a]+c<sol[b])
ok=0;
}
if(ok)
out<<"DA\n";
else
out<<"NU\n";
}
return 0;
}