Cod sursa(job #2001832)

Utilizator patcasrarespatcas rares danut patcasrares Data 17 iulie 2017 20:23:11
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include<fstream>
#include<vector>
#include<iostream>
#include<queue>
using namespace std;
ifstream fin("ciclu.in");
ofstream fout("ciclu.out");
int n,m,a,b,c[1005][1005],d[1005],nr,e[1005],f,ma=(1<<25);
float rez;
int v=(1<<25);
vector<int >x[1005];
queue<int >q;
int ve()
{
    while(!q.empty())
        q.pop();
    q.push(1);
    d[1]=0;
    nr++;
    e[1]=1;
    while(!q.empty())
    {
        int nod=q.front();
        q.pop();
        for(int i=0;i<x[nod].size();i++)
        {
            int vecin=x[nod][i];
            if(d[nod]+c[nod][vecin]<d[vecin])
            {
                e[vecin]++;
                if(e[vecin]==n)
                {
                    f=vecin;
                    return 1;
                }
                d[vecin]=d[nod]+c[nod][vecin];
            }
        }
    }
    return 0;
}
int main()
{
    fin>>n>>m;
    cout<<v;
    for(int i=1;i<=m;i++)
    {
        fin>>a>>b>>c[a][b];
        x[a].push_back(b);
    }
    int st=1,dr=v;
    while(st<=dr)
    {
        v=(st+dr)/2;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                c[a][b]-=v;
        for(int i=1;i<=n;i++)
            e[i]=0;
        for(int i=1;i<=n;i++)
            d[i]=ma;
        if(ve())
            dr=v-1;
        else
            st=v+1;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                c[a][b]+=v;
    }
    fout<<rez/100;

}