Pagini recente » Cod sursa (job #1631579) | Cod sursa (job #2580833) | Cod sursa (job #1711346) | Cod sursa (job #3132598) | Cod sursa (job #1152359)
#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 schimba(double a[MAX_N],double b[MAX_N],int m) {
for(int i=1;i<=m+1;i++) {
swap(a[i],b[i]);
}
}
void red(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;
*/
int p=1;
for(int j=1;j<=m;j++) {
if(!a[p][j]) {
for(int i=p+1;i<=n;i++) {
if(a[i][j]) {
schimba(a[p],a[i],m);
break;
}
}
if(!a[p][j]) {
continue;
}
}
for(int i=1;i<=n;i++) {
if(i==p) {
continue;
}
red(a[i],a[p],-(a[i][j]/a[p][j]),m);
}
p++;
}
p=1;
for(int j=1;j<=m;j++) {
if(a[p][j]) {
d[j]=a[p][m+1]/a[p][j];
p++;
}
}
}
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;
}