http://www.lydsy.com/JudgeOnline/problem.php?id=2419

∑Ui−UjRi,j=0∑Ui−UjRi,j=0

∑U1−UjR1,j=1∑U1−UjR1,j=1

∑Un−UjRi,n=−1∑Un−UjRi,n=−1

Un=0

这就是方程了。。。但是代码有点不理解

#include<bits/stdc++.h>
using namespace std;
const int N = ;
double a[N][N], g[N][N];
int n, m;
void build()
{
for(int i = ; i <= n; ++i)
for(int j = ; j <= n; ++j)
a[i][i] += g[i][j], a[i][j] -= g[i][j];
a[][n + ] = 1.0;
a[n][n + ] = -1.0;
a[n][n] += 1.0;
}
void gauss_jordan()
{
for(int now = ; now <= n; ++now)
{
int x = now;
for(int i = now + ; i <= n; ++i) if(fabs(a[i][now]) > fabs(a[x][now])) x = i;
for(int i = ; i <= n + ; ++i) swap(a[now][i], a[x][i]);
double t = a[now][now];
for(int i = now; i <= n + ; ++i) a[now][i] /= t;
for(int i = ; i <= n; ++i) if(i != now)
{
double t = a[i][now];
for(int j = now; j <= n + ; ++j) a[i][j] -= t * a[now][j];
}
}
}
int main()
{
while(scanf("%d%d", &n, &m) != EOF)
{
memset(a, , sizeof(a));
memset(g, , sizeof(g));
for(int i = ; i <= m; ++i)
{
int u, v; double r; scanf("%d%d%lf", &u, &v, &r);
if(u == v) continue;
g[u][v] += 1.0 / r; g[v][u] += 1.0 / r;
}
build();
gauss_jordan();
printf("%.2f\n", a[][n + ]);
}
return ;
}

最新文章

  1. sublime 中 pyv8 binary 报错怎么处理?
  2. Android 开发项目笔记2 自建View满足特殊要求
  3. Adaboost 算法
  4. MVC中的模型
  5. Linux下链接mysql数据库的命令
  6. 系统分区MBR、GPT
  7. iOS之Storyboard References
  8. eclipse为hibernate.cfg.xml添加自动提示【转】
  9. width(),innerHTML(),outerHTML()
  10. 在Ubuntu Linux下怎样安装QQ
  11. ES6笔记③
  12. 复合文档的二进制存储格式研究[ole存储结构](word,xls,ppt...)[转]
  13. Dorado7与@ManyToMany的矛盾分析
  14. FC总线技术简介
  15. [BZOJ1008] [HNOI2008] 越狱 (数学)
  16. You Dream. We Test.
  17. android中webView加载H5,JS不能调用问题的解决
  18. scrollIntoView()方法
  19. 四则运算APP,团队项目之需求
  20. 【技术分享会】 @第六期 iOS开发基础

热门文章

  1. Python之模块和包导入
  2. hihocoder 1515 分数调查(树形dp)
  3. noip模拟赛 仓库
  4. Codeforces704C. Black Widow
  5. hosts.allow和hosts.deny文件
  6. response的作用
  7. oracle索引简单使用
  8. 使用Java快速开发博客、官网等偏内容型网站-IDEA篇-MCMS
  9. Python学习系列之文件操作
  10. Sound Card Chip