二分+高斯消元

我们利用物理里的势能来表示,每个点有一个势能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. JS——行内式注册事件

    html中行内调用function的时候,是通过window调用的function,所以打印this等于打印window,所以在使用行内注册事件时务必传入参数this <!DOCTYPE htm ...

  2. [Windows Server 2012] Tomcat安全加固方法

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

  3. dotnetnuke 7.x登录时不跳到站点设置中的指定页

    查源码发现登录按钮有参数,点击跳到登录页或者弹窗登录,真正登录后会根据传参的url反回.因为皮肤对像没有相应参数,所以只能去掉参数.我是用js去的,偷个懒吧.如下所示: <script type ...

  4. iOS 9 中可用的受信任根证书列表

    iOS 受信任证书存储区包含随 iOS 预安装的可信根证书.  https://support.apple.com/zh-cn/HT205205 关于信任和证书 iOS 9 受信任证书存储区包含三类证 ...

  5. C# DataTable扩展方法

    在日常搬砖中,总结了一些简单的扩展方法. public static bool IsNullOrEmpty(this DataTable dt) { ; } public static bool Is ...

  6. ORM 操作

    官方文档 一.操作 基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') # 增加一条数据,可以接受字典类型数据 **kwargs obj = mo ...

  7. 10.mysql事务管理及python操作

    在用户操作MySQL过程中,对于一般简单的业务逻辑或中小型程序而言,无需考虑应用MySQL事务.但在比较复杂的情况下,往往用户在执行某些数据操作过程中,需要通过一组SQL语句执行多项并行业务逻辑或程序 ...

  8. 发现:Click事件也能获取鼠标单击的坐标

    按照MSDN的说明以及平时的习惯,我们要获取鼠标单击时的相对坐标,都会使用MouseClick等事件,今天,偶然发现,原来Click事件也可以. /* 惊天地泣鬼神的考古业绩. * 原来Cilck事件 ...

  9. Python之类方法,lambda,闭包简谈

    类方法,lambda,闭包 类方法 lambda 闭包 类方法 classmethod staticmethod instancemethod 类方法 类方法,通过装饰器@classmethod来标明 ...

  10. 第六节:pandas函数应用

    1.pipe() :表格函数应用: 2.apply():表格行列函数应用: 3.applymap():表格元素应用.