Cod sursa(job #1937369)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 23 martie 2017 21:58:47
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 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];

int solvetest()
{
    int i,j,a,b,c;
    f>>n>>m>>s;
    for (i=1;i<=n;i++)
        f>>d[i];
    if (d[s])
        return 0;
    for (i=1;i<=m;i++) {
        f>>a>>b>>c;
        if (d[a]+c<d[b]||d[b]+c<d[a])
            return 0;
    }
    return 1;
}
int main()
{
    int t;
    for (f>>t;t;t--)
        (solvetest()==1)?g<<"DA\n":g<<"NU\n";

    return 0;
}