Pagini recente » Cod sursa (job #2252664) | Cod sursa (job #299353) | Cod sursa (job #1336685) | Cod sursa (job #2364352) | Cod sursa (job #2106200)
#include<stdio.h>
#include<vector>
FILE *re, *we;
using namespace std;
const int MAXN = 256;
int n, m;
struct val
{
int no, co;
};
vector <val> g[MAXN];
double mg[MAXN][MAXN];
bool viz[MAXN];
void sterge(int de, int ce, int poz)
{
double c = mg[ce][poz];
double d = mg[de][poz];
for(int i = 0; i < n; i++) {
mg[de][i] -= ((mg[ce][i] * d) / c);
}
}
int main ()
{
we = fopen("tunel.out", "w");
re = fopen("tunel.in", "r");
fscanf(re, "%d%d", &n, &m);
for(int i = 0; i < m; i++) {
int a, b, c;
fscanf(re, "%d%d%d", &a, &b, &c);
val nou;
nou.no = b;
nou.co = c;
g[a].push_back(nou);
nou.no = a;
g[b].push_back(nou);
}
for(int i = 1; i < n; i++) {
for(auto &it : g[i]) {
mg[i][0] += it.co;
mg[i][it.no] = -1;
}
mg[i][i] = (g[i].size());
mg[i][n] = 0;
}
for(int i = 1; i < n; i++) {
for(int j = 0; j <= n; j++) {
//mg[i][j] *= 10000;
}
}
for(int la = n - 1; la >= 2; la--) {
int baz;
for(int i = 1; i < n; i++) {
if(mg[i][la] != 0 && !viz[i]) {
baz = i;
}
}
viz[baz] = 1;
for(int i = 1; i < n; i++) {
if(!viz[i]) {
sterge(i, baz, la);
}
}
/*
for(int i = 1; i < n; i++) {
for(int j = 0; j <= n; j++) {
printf("%.3f ", mg[i][j]);
}
printf("\n");
}
printf("\n\n");
*/
}
for(int i = 1; i < n; i++) {
int f = 0;
for(int j = 1; j <= n; j++) {
if(j != 1) {
if(mg[i][j] != 0) {
f = 1;
break;
}
} else {
if(mg[i][j] == 0) {
f = 1;
break;
}
}
}
if(f == 0) {
fprintf(we, "%f", (mg[i][0] / mg[i][1]));
break;
}
}
fclose(re);
fclose(we);
return 0;
}