传送门

题意:求无向图割集中平均边权最小的集合。

论文《最小割模型在信息学竞赛中的应用》原题。

分数规划。每一条边取上的代价为1。

#include <bits/stdc++.h>
using namespace std; inline int read() {
int x = , f = ; char ch = getchar();
while (ch < '' || ch > '') { if (ch == '-') f = -; ch = getchar(); }
while (ch >= '' && ch <= '') { x = x * + ch - ; ch = getchar(); }
return x * f;
} const int N = 1e5 + ;
const double EPS = 1e-;
struct Edge { int v, next; double f; } edge[N];
int n, m, head[N], cnt, level[N], iter[N], x[N], y[N];
double z[N];
bool vis[N];
inline void add(int u, int v, double f) {
edge[cnt].v = v; edge[cnt].f = f; edge[cnt].next = head[u]; head[u] = cnt++;
edge[cnt].v = u; edge[cnt].f = f; edge[cnt].next = head[v]; head[v] = cnt++;
}
bool bfs() {
for (int i = ; i <= n; i++) iter[i] = head[i], level[i] = -, vis[i] = ;
queue<int> que;
que.push();
level[] = ;
while (!que.empty()) {
int u = que.front(); que.pop();
for (int i = head[u]; ~i; i = edge[i].next) {
int v = edge[i].v; double f = edge[i].f;
if (level[v] < && f) {
level[v] = level[u] + ;
que.push(v);
}
}
}
return level[n] != -;
} double dfs(int u, double f) {
if (u == n) return f;
double flow = ;
for (int i = iter[u]; ~i; i = edge[i].next) {
iter[u] = i;
int v = edge[i].v;
if (level[v] == level[u] + && edge[i].f) {
double w = dfs(v, min(f, edge[i].f));
//if (fabs(w) < EPS) continue;
f -= w;
flow += w;
edge[i].f -= w, edge[i^].f += w;
if (f <= ) break;
}
}
return flow;
} double dinic() {
double ans = ;
while (bfs()) ans += dfs(, 1e8);
return ans;
} bool check(double mid) {
memset(head, -, sizeof(head));
cnt = ;
double flow = ;
for (int i = ; i <= m; i++) {
if (z[i] > mid) add(x[i], y[i], z[i] - mid);
else flow += z[i] - mid;
}
flow += dinic();
return flow >= EPS;
} void get_ans(int u) {
vis[u] = ;
for (int i = head[u]; ~i; i = edge[i].next) {
int v = edge[i].v;
if (!vis[v] && edge[i].f > EPS) {
get_ans(v);
}
}
}
int ans[N], tol; int main() {
int kase = ;
while (~scanf("%d%d", &n, &m)) {
if (kase > ) puts("");
kase = ;
for (int i = ; i <= m; i++) {
x[i] = read();y[i] = read();
int a = read();z[i] = (double)a;
}
double l = , r = 1e7;
while (r - l > EPS) {
double mid = (l + r) / 2.0;
if (check(mid)) l = mid;
else r = mid;
}
check(r);
get_ans();
tol = ;
for (int i = ; i <= m; i++) {
if (vis[x[i]] + vis[y[i]] == || z[i] <= r) {
ans[++tol] = i;
}
}
printf("%d\n", tol);
for (int i = ; i <= tol; i++) {
if (i - ) putchar(' ');
printf("%d", ans[i]);
}
puts("");
}
return ;
}

ZOJ 2676 Network Wars(网络流+分数规划)的更多相关文章

  1. ZOJ 2676 Network Wars[01分数规划]

    ZOJ Problem Set - 2676 Network Wars Time Limit: 5 Seconds      Memory Limit: 32768 KB      Special J ...

  2. zoj 2676 Network Wars 0-1分数规划+最小割

    题目详解出自 论文 Amber-最小割模型在信息学竞赛中的应用 题目大意: 给出一个带权无向图 G = (V,E), 每条边 e属于E都有一个权值We,求一个割边集C,使得该割边集的平均边权最小,即最 ...

  3. HDU 2676 Network Wars 01分数规划,最小割 难度:4

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1676 对顶点i,j,起点s=1,终点t=n,可以认为题意要求一组01矩阵use ...

  4. ZOJ 2676 Network Wars ★(最小割算法介绍 && 01分数规划)

    [题意]给出一个带权无向图,求割集,且割集的平均边权最小. [分析] 先尝试着用更一般的形式重新叙述本问题.设向量w表示边的权值,令向量c=(1, 1, 1, --, 1)表示选边的代价,于是原问题等 ...

  5. ZOJ 2676 Network Wars(最优比例最小割)

    Network Wars Time Limit: 5 Seconds      Memory Limit: 32768 KB      Special Judge Network of Bytelan ...

  6. zoj2676 Network Wars(0-1分数规划,最大流模板)

    Network Wars 07年胡伯涛的论文上的题:http://wenku.baidu.com/view/87ecda38376baf1ffc4fad25.html 代码: #include < ...

  7. ZJU 2676 Network Wars

    Network Wars Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...

  8. 01分数规划zoj2676(最优比例,最小割集+二分)

    ZOJ Problem Set - 2676         Network Wars Time Limit: 5 Seconds      Memory Limit: 32768 KB      S ...

  9. ZOJ - 2676 01分数规划 浮点ISAP

    题意:求最小割集\(C\),使得\(\frac{\sum_{i∈C} cost_i}{|C|}\)最小 模型就是01分数规划\(\frac{\sum_{i=1}^{m}cost_i*x}{\sum_{ ...

随机推荐

  1. c++11多线程记录6:条件变量(condition variables)

    https://www.youtube.com/watch?v=13dFggo4t_I视频地址 实例1 考虑这样一个场景:存在一个全局队列deque,线程A向deque中推入数据(写),线程B从deq ...

  2. 57 容器(十一)——Collections容器工具类

    Collections是一个工具类,它提供了与集合操作有关的方法,好比数组中的Arrays工具类.(jdk中的工具类名都是xxxs,有关工具类名参考:https://zhuanlan.zhihu.co ...

  3. git设置代理模式,仅为github设置代理

    设置代理: 全局代理 git config --global http.proxy 127.0.0.1:1087 局部代理,在github clone 仓库内执行 git config --local ...

  4. redis cluster slots数量 为何是16384(2的14次方)

    Redis 集群并没有使用一致性hash,而是引入了哈希槽的概念. Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分has ...

  5. Django模板语言的学习

    1.模板系统 1.语法 1.变量相关 {{ name}} ,{{ name|length}}, {{ name |default:"默认值"}} 2.逻辑相关 1.if判断 {% ...

  6. 2019 华云数据java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.华云数据等公司offer,岗位是Java后端开发,最终选择去了华云数据. 面试了很多家公司,感觉大部分公司考察的点 ...

  7. 自学Python编程的第三天----------来自苦逼的转行人

    2019-09-14 11:09:50 学Python的第三天和写博客的第三天 本来第三天的内容前天就应该发的,但是因为有点难度,用了两天的时间去学习,按道也是昨天发, 因为中秋导致今天早上发,第三天 ...

  8. 在Linux系统中创建SSH服务器别名

    如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间.你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名.主机名.SSH 端口号和 IP 地 ...

  9. Matlab观察者模式

    要点: 1.服务端(Subject)维护一个观察者的列表,以便能够向所有的观察者(Observer)推送信息 2.观察者可以获取服务端的状态 3.服务端和观察者可抽象,可以有多个不同实现 Subjec ...

  10. 处理vue-quill-editor回显数据的时候没有空格问题

    这是我要实现的效果 这是我回显后的情况(可以看见空格都没有了) 处理后 处理方法  添加一个class="ql-editor" <quill-editor class=&qu ...