二分+高斯消元

我们利用物理里的势能来表示,每个点有一个势能h,再由流量守恒可以得到deg[x]*h[x]=sigma(h[y]) 如果x,y之间有边。这个式子是由流量守恒推出的,所以当x=1或n是不满足这个方程的。

每次二分n的势能,然后把1和n赋值,高斯消元,检验答案。

势能保证了到达一个点所有路径长度相同,也保证了流量守恒。

各种小错误 调了两个小时

#include<bits/stdc++.h>
using namespace std;
const int N = ;
struct edge {
int a, b;
double c;
} e[N * ];
int n, m;
double ans;
double a[N][N];
void gauss()
{
for(int i = ; i <= n; ++i)
{
int now = i, pos = i;
while(now <= n)
{
if(fabs(a[now][i]) > fabs(a[pos][i]))
pos = now;
++now;
}
for(int j = ; j <= n + ; ++j)
swap(a[i][j], a[pos][j]);
if(fabs(a[i][i]) < 1e-) continue;
double x = a[i][i];
for(int j = ; j <= n + ; ++j)
a[i][j] /= x;
for(int j = ; j <= n; ++j) if(j != i && fabs(a[j][i]) > 1e-)
{
double x = a[j][i] / a[i][i];
for(int k = ; k <= n + ; ++k)
a[j][k] -= x * a[i][k];
}
}
}
bool C(double x)
{
for(int i = ; i <= n; ++i)
for(int j = ; j <= n + ; ++j)
a[i][j] = 0.0;
for(int i = ; i <= m; ++i)
{
if(e[i].b != && e[i].b != n)
{
a[e[i].b][e[i].b] += 1.0;
a[e[i].b][e[i].a] -= 1.0;
}
if(e[i].a != && e[i].a != n)
{
a[e[i].a][e[i].a] += 1.0;
a[e[i].a][e[i].b] -= 1.0;
}
}
a[][] = 1.0;
a[n][n] = 1.0;
a[n][n + ] = x;
gauss();
for(int i = ; i <= m; ++i)
{
if(fabs(a[e[i].b][n + ] - a[e[i].a][n + ]) > e[i].c) return false;
}
return true;
}
int main()
{
scanf("%d%d", &n, &m);
for(int i = ; i <= m; ++i)
{
scanf("%d%d%lf", &e[i].a, &e[i].b, &e[i].c);
}
double l = , r = 1e9 + ;
while(r - l > 1e-)
{
double mid = (l + r) / 2.0;
if(C(mid)) l = ans = mid;
else r = mid;
}
C(ans);
ans = ;
for(int i = ; i <= m; ++i)
{
if(e[i].b == n || e[i].a == n) ans += fabs(a[e[i].b][n + ] - a[e[i].a][n + ]);
}
printf("%.6f\n", ans);
for(int i = ; i <= m; ++i)
printf("%.6f\n", a[e[i].b][n + ] - a[e[i].a][n + ]);
return ;
}

267C的更多相关文章

  1. 在网站中嵌入VideoJs视频播放器

    一个博客难免需要引用视频来说明内容,但想要自己来实现一个视频播放器是不是一时半会就能完成的,更重要的是这需要对视频播放技术有一定的了解.于是自然而然的有人会想到开源项目.一个不错的选择便是video. ...

随机推荐

  1. Python 时间处理---------笔记

    时区处理&格式化 import pytz from datetime import datetime # 设置时区 timezone = pytz.timezone('Asia/Shangha ...

  2. [Windows Server 2003] 安装SQL Server 2005

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装SQL S ...

  3. [Windows Server 2003] IIS自带FTP安装及配置方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:IIS6.0自 ...

  4. 3星|《管理十诫》:十年前可口可乐退休CEO的一生管理经验总结

    管理十诫:影响你一生的管理哲学 英文书应该是2008年出版的.国内出版过几个译本. 作者是可口可乐CEO.本书是他从可口可乐CEO退下来后写的管理经验总结.作者总结了11条CEO不应该做的事.这11条 ...

  5. CAD计算两曲线间最短路径(com接口)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  6. 取三级分销上下级用户id

    //取上三级的用户idpublic function _get_up_third_id($member_id){ $up_id=array(); $invite_id=dbselect('invite ...

  7. CentOS安装Docker-ce并配置国内镜像

    前提条件 1.系统.内核 CentOS7 要求64位系统.内核版本3.10以上 CentOS6 要求版本在6.5以上,系统64位.内核版本2.6.32-431以上 查看内核版本号 uname -r # ...

  8. Light Oj - 1134 Be Efficient

    题目传送门:Be Efficient 题意:输入n和m,然后输入有n个元素的一个序列,问有多少个子序列元素的和能整除m. 思路:求前缀和,利用一个前缀的一个定理求解. 前缀和的一个定理是:每次求的前缀 ...

  9. Ajax基本写法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Problem 21

    Problem 21 https://projecteuler.net/problem=21 Let d(n) be defined as the sum of proper divisors of  ...