Cod sursa(job #1937377)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 23 martie 2017 22:03:34
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <cstdio>
#define nmax 50005
using namespace std;
class instream
{
public:
    instream() {}
    instream(const char *file_name) {
        input_file=fopen(file_name,"r");
        cursor=0;
        fread(buffer,sizy,1,input_file);
    }
    inline instream &operator >>(int &n) {
        while(buffer[cursor]<'0'||buffer[cursor]>'9')
            advance();
        n=0;
        while('0'<=buffer[cursor]&&buffer[cursor]<='9')
        {
            n=n*10+buffer[cursor]-'0';
            advance();
        }
        return *this;
    }
private:
    FILE *input_file;
    static const int sizy=1<<16;
    int cursor;
    char buffer[sizy];
    inline void advance() {
        ++ cursor;
        if(cursor==sizy){
            cursor=0;
            fread(buffer,sizy,1,input_file);
        }
    }
};
instream f("distante.in");
ofstream g("distante.out");
int n,m,s,d[nmax];

void solvetest() {

    int i,x,y,z,ok=1;
    f>>n>>m>>s;
    for(i=1;i<=n;i++)
        f>>d[i];
    for(i=1;i<=m;i++) {
        f>>x>>y>>z;
        if(d[x]+z<d[y]||d[y]+z<d[x])
            ok=0;
    }
    g<<((d[s]==0&&ok)?"DA\n":"NU\n");
}

int main() {

    int t;
    f>>t;
    for(;t;--t)
        solvetest();
    return 0;
}