Pagini recente » Cod sursa (job #1953790) | Cod sursa (job #9223) | Cod sursa (job #579869) | Cod sursa (job #1377074) | Cod sursa (job #403483)
Cod sursa(job #403483)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
#define oo 0x3f3f3f3f
#define foreach(v) for(typeof (v).begin() it=(v).begin();it!=(v).end();it++)
struct nod_
{long long nod;
long long lg;
};
vector<nod_> G[1005];
queue<long long> q;
long long n,m,isin[1005],dist[1005],nr[1005];
long long blmf(long long trai)
{long long u,i,terminat;
for(i=1;i<=n;i++)
foreach(G[i])
{it->lg=it->lg - trai;
}
q.push(1);
isin[1]=1;
nr[1]=1;
dist[0]=1;
terminat=0;
for(i=2;i<=n;i++)
{nr[i]=isin[i]=0;
dist[i]=oo;
}
while(!q.empty()&&!terminat)
{u=q.front();
q.pop();
isin[u]=0;
foreach(G[u])
{
if(dist[u]+it->lg<dist[it->nod])
{dist[it->nod]=dist[u]+it->lg;
if(isin[it->nod]==0)
{q.push(it->nod);
isin[it->nod]=1;
nr[it->nod]++;
if(nr[it->nod]>n)
{terminat=1;
}
}
}
}
}
for(i=1;i<=n;i++)
foreach(G[i])
{it->lg=it->lg + trai;
}
if(terminat==1)
return 0;
else return 1;
}
long long bs(long long lo,long long up)
{long long m;
if(lo==up)
{ if(blmf(lo)==1)
{return lo;}
else {return lo+1;}
}
else
{m=lo+(up-lo)/2;
if(blmf(m)==0)
{return bs(lo,m-1);
}
else
if(blmf(m+1)==1)
{return bs(m+1,up);
}
else
{return m;}
}
}
void cit()
{long long i,x,y,z;
ifstream fin("ciclu.in");
fin>>n>>m;
for(i=1;i<=m;i++)
{fin>>x>>y>>z;
G[x].push_back((nod_){y,100*z});
}
fin.close();
}
int main()
{
cit();
ofstream fout("ciclu.out");
fout<<(float)bs(0,10000000)/100;
fout.close();
return 0;
}