非常暴力美学的线性规划。。。囧。。。不知为何,让我想起 SPOJ CAKE3。。。
值得注意的事。。。首先分数类是可以偷懒不写的…(暴力枚举分母)。。。
然后也没必要分 d[][] 和 w[][] 进行讨论,因为反正都相等了。。。
最后所有的约束关系恰好就是所有的三角不等式。。
(也就是 floyd 算法里的 kij、但这个题里因为反正都约束条件,所以你经典顺序写错的话也会不影响计算结果囧… )。。。。
const int N = 10;
int d[N][N], x0[N][N], x1[N][N];
int n;
struct Simplex {
const static int N = int(1e2) + 9, M = int(1e3) + 9;
DB a[N][M];
int n, m;
void pivot(int in, int out) {
REP(i, m+1) if(i!=in) a[out][i] /= -a[out][in]; //重置out约束
a[out][in] = 1/a[out][in];
REP(i, n+1) if (i!=out && sgn(a[i][in])) { //重新计算其他约束
DB t = a[i][in]; a[i][in] = 0;
REP(j, m+1) a[i][j] += t*a[out][j];
}
}
DB run() {
while (true) {
int in=0, out=0; DB Min=OO;
REP_1(i, m) if(sgn(a[0][i])>0) {
in=i;
break;
}
if(!in)return a[0][0];
REP_1(i, n) if(sgn(a[i][in])<0&&a[i][0]/-a[i][in]<Min) {
Min=a[i][0]/-a[i][in];
out=i;
}
if(!out)throw ; //unbounded
pivot(in, out);
}
}
void gao() {
if (RD(::n) == 2) {
puts("0/1");
return;
}
n = m = 0;
REP(i, ::n) FOR(j, i+1, ::n) {
x0[i][j] = x0[j][i] = ++n;
x1[i][j] = x1[j][i] = ++n;
}
// z b
// c A
Rush {
int x, y, w; RD(x, y, w);
d[x][y] = d[y][x] = w;
a[x0[x][y]][0] = a[x1[x][y]][0] = 1;
}
REP(k, ::n) REP(i, ::n) FOR(j, i+1, ::n) {
// d[i][k] + d[k][j] <= d[i][j]
++m;
a[0][m] += d[i][j] - d[i][k] - d[k][j];
a[x0[i][j]][m] -= 1; a[x1[i][j]][m] += 1;
a[x0[i][k]][m] += 1; a[x1[i][k]][m] -= 1;
a[x0[k][j]][m] += 1; a[x1[k][j]][m] -= 1;
}
DB z = run();
//printf("%.9f\n", z);
int i = 1; while (sgn(z * i, int(z*i+0.5))) ++i;
printf("%d/%d\n",int(z*i+0.5), i);
}
} fst;
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif
fst.gao();
}




Alca
Amber
Belleve Invis
Chensiting123
Edward_mj
Fotile96
Hlworld
Kuangbin
Liyaos
Lwins
LYPenny
Mato 完整版
Mikeni2006
Mzry
Nagatsuki
Neko13
Oneplus
Rukata
Seter
Sevenkplus
Sevenzero
Shirleycrow
Vfleaking
wangzhpp
Watashi
WJMZBMR
Wywcgs
XadillaX
Yangzhe
三途川玉子
About.me
Vijos
