Pagini recente » Cod sursa (job #732668) | Cod sursa (job #856674) | Cod sursa (job #1713930) | Cod sursa (job #2792640) | Cod sursa (job #1152306)
#include <fstream>
#include <algorithm>
#include <vector>
#include <iomanip>
#define pe pair<int,int>
#define mp make_pair
#define fi first
#define se second
using namespace std;
ifstream fin("tunel.in");
ofstream fout("tunel.out");
const int MAX_N=260;
const double EPS=0.0001;
vector<pe> A[MAX_N];
double a[MAX_N][MAX_N];
double d[MAX_N];
void scad(double a[MAX_N],double b[MAX_N],double c,int m) {
for(int i=1;i<=m+1;i++) {
a[i]+=b[i]*c;
}
}
void gauss(int n,int m) {
/*for(int i=1;i<=n;i++,fout<<endl) {
for(int j=1;j<=m+1;j++) {
fout<<a[i][j]<<' ';
}
}
fout<<endl;
*/
for(int j=1;j<=m;j++) {
for(int i=1;i<=n;i++) {
if(i==j) {
continue;
}
if(a[i][j]<=EPS&&a[i][j]>=-EPS) {
continue;
}
scad(a[i],a[j],-(a[i][j]/a[j][j]),m);
}
}
for(int j=1;j<=m;j++) {
d[j]=a[j][m+1]/a[j][j];
}
}
int main() {
int n,m;
fin>>n>>m;
fout<<setprecision(4)<<fixed;
for(int i=1;i<=m;i++) {
int a,b,c;
fin>>a>>b>>c;
A[a].push_back(mp(b,c));
A[b].push_back(mp(a,c));
}
for(int i=1;i<n;i++) {
double p=1.0/A[i].size();
a[i][i]=1.0;
for(auto it=A[i].begin();it!=A[i].end();it++) {
a[i][n]+=p*it->se;
if(it->fi!=n) {
a[i][it->fi]-=p;
}
}
}
gauss(n-1,n-1);
fout<<d[1];
return 0;
}