Pagini recente » Cod sursa (job #2086968) | Cod sursa (job #974761) | Cod sursa (job #1001348) | Cod sursa (job #2042155) | Cod sursa (job #2001832)
#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;
}