Pagini recente » Cod sursa (job #2670268) | Cod sursa (job #3141049) | Cod sursa (job #285139) | Cod sursa (job #2686995) | Cod sursa (job #3002789)
#include <bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
ifstream in("ciclu.in");
ofstream out("ciclu.out");
vector <pair <int, int>> g[1105];
int n, m;
int dp[1105][1105];
double medie[1105];
signed main()
{
in >> n >> m;
for(int i = 1; i <= m; i++)
{
int x, y, w;
in >> x >> y >> w;
x--;
y--;
g[x].push_back({y, w});
}
///
for(int i = 0; i <= n; i++)
{
for(int j = 0; j < n; j++)
{
dp[i][j] = -1;
}
}
dp[0][0] = 0;
for(int k = 1; k <= n; k++)
{
for(int vertex = 0; vertex < n; vertex++)
{
for(auto it:g[vertex])
{
if(dp[k - 1][it.first] == -1)
continue;
int gr = it.second;
if(dp[k][vertex] == -1)
dp[k][vertex] = dp[k - 1][it.first] + gr;
else
dp[k][vertex] = min(dp[k][vertex], dp[k - 1][it.first] + gr);
}
}
}
///
for(int i = 0; i < n; i++)
{
if(dp[n][i] == -1)
continue;
for(int k = 0; k < n; k++)
{
if(dp[k][i] != -1)
medie[i] = max(medie[i],((double)dp[n][i] - dp[k][i]) / (n - k));
}
}
///
double rasp = medie[0];
for(int i = 0; i < n; i++)
{
if(medie[i] > 0)
rasp = min(rasp, medie[i]);
}
out << fixed << setprecision(2) << rasp;
return 0;
}