题目链接:

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34651

题意:

给定一个有向图,每一条边都有一个权值,每次你可以选择一个节点v和一个整数d,把所有以v结尾的边权值减小d,把所有以v为起点的边的权值增加d,最后要让所有边权的最小值大于0且尽量大。

题解:

最小值最大,可以用二分,这样可以得到一个差分约束系统,然后每次都用最短路跑。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;const int maxn = 555;
const int maxm = 2777;struct Edge {int v, w;Edge(int v, int w) :v(v), w(w) {}Edge() {}
};vector<Edge> egs;
vector<int> G[maxn];
int tot = 0;
int n, m;void addEdge(int u, int v, int w) {egs.push_back(Edge(v, w));tot = egs.size();G[u].push_back(tot - 1);
}bool inq[maxn];
int d[maxn];
int cnt[maxn];
bool spfa(int x) {bool ret = true;for (int i = 1; i < n; i++) {for (int j = 0; j < G[i].size(); j++) {Edge& e = egs[G[i][j]];e.w -= x;}}memset(inq, 0, sizeof(inq));memset(cnt, 0, sizeof(cnt));memset(d, 0x3f, sizeof(d));queue<int> Q;d[0] = 0; inq[0] = true; Q.push(0);while (!Q.empty()) {int u = Q.front(); Q.pop();inq[u] = false;for (int i = 0; i < G[u].size(); i++) {Edge& e = egs[G[u][i]];if (d[e.v] > d[u] + e.w) {d[e.v] = d[u] + e.w;if (!inq[e.v]) {Q.push(e.v); inq[e.v] = true;if (++cnt[e.v] > n) {ret = false; break;}}}}if (ret == false) break;//printf("u:%d\nx:%d\n", u,x);//printf("in circle\n");
    }for (int i = 1; i < n; i++) {for (int j = 0; j < G[i].size(); j++) {Edge& e = egs[G[i][j]];e.w += x;}}return ret;
}void init() {for (int i = 0; i < n; i++) G[i].clear();egs.clear();
}int main() {while (scanf("%d%d", &n, &m) == 2 && n) {n++;init();int l = 1, r = -1;for (int i = 0; i < m; i++) {int u, v, w;scanf("%d%d%d", &u, &v, &w);r = max(r, w);addEdge(u, v, w);}for (int i = 1; i < n; i++) {addEdge(0, i, 0);}r++;if (!spfa(1)) {printf("No Solution\n");}else if (spfa(r)) {printf("Infinite\n");}else {while (l + 1 < r) {int mid = l + (r - l) / 2;if (spfa(mid)) l = mid;else r = mid;//printf("here!\n");
            }printf("%d\n", l);}}return 0;
}/*
1
2 10
1
2 -10
3
2 4
3 2
1 5
5
3 4
2 5
4 2
1 0
2 -1
*/

转载于:https://www.cnblogs.com/fenice/p/5532549.html

UVA - 11478 Halum 二分+差分约束相关推荐

  1. UVA 11478 Halum(用bellman-ford解差分约束)

    对于一个有向带权图,进行一种操作(v,d),对以点v为终点的边的权值-d,对以点v为起点的边的权值+d.现在给出一个有向带权图,为能否经过一系列的(v,d)操作使图上的每一条边的权值为正,若能,求最小 ...

  2. 差分约束问题 ---- 2019ccpc哈尔滨A. Artful Paintings[二分+差分约束+建图剪枝]

    题目链接 题目大意: 有N≤3e3N≤3e3N≤3e3个格子,你可以任意给每个格子染色,但是要满足M≤3e3M≤3e3M≤3e3限制条件,限制条件有两种类型: 区间[l,r][l,r][l,r]中被染 ...

  3. UVA 11478 Halum (差分约束)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  4. Luogu4926 倍杀测量者(二分答案+差分约束)

    容易想到二分答案.问题变为判断是否所有条件都被满足,可以发现这是很多变量间的相对关系,取个log之后就是经典的差分约束模型了.特殊的地方在于某些人的分数已被给定,从每个人开始跑一遍最短路判断一下是否能 ...

  5. hdu1529 差分约束(好题)

    题意:       超市在每个时间都有需要的人数(24小时)比如 1 0 0 0 0 ....也就是说在第0个小时的时候要用一个人,其他的时间都不用人,在给你一些人工作的起始时间,如果雇佣了这个人,那 ...

  6. LOJ:出纳员问题(差分约束)

    解析 毒瘤题 思路的关键是利用前缀和建图,枚举sum[24]点值 (其实可以二分) 主要是细节的处理不够清晰 使下标从1开始会一下子好做起来 然后把0当做源点 差分约束一定要有源点!! 代码 #inc ...

  7. 【POJ - 1275】Cashier Employment(差分约束,建图)

    题干: A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit i ...

  8. HDU 4598 Difference 差分约束 + 判奇圈

    题意:给你一个无向图 这个图是difference的如果存在一个正实数T使得图中所有的点的绝对值|ai|<T 并且点i j构成一条边当且仅当|ai-aj|>=T 问你是否存在一个这样的图 ...

  9. [差分约束] AcWing-393 雇佣收银员 AcWing-2128 狡猾的商人 AcWing-3265 再卖菜

    差分约束的大概样子 (大概) 差分约束一般是由特殊的n元一次不等式组组成的,它包含N个变量X1-Xn和M个约束条件,而且每个约束条件都是由两个变量做差组成的,形如,其中的ck是常数,它需要我们找到一组 ...

最新文章

  1. 如何将某个groupbox中的数据赋值到另一个groupbox_React中的数据和数据流
  2. 手动修改Win7开机欢迎界面背景图片
  3. 如何成为一名优秀的程序员?
  4. 教育部:到2020年全面普及实名制网络学习空间
  5. Android应用开发(1)---Android五大UI布局的特有属性
  6. Netty工作笔记0011---Channel应用案例2
  7. GIT与SVN世纪大战
  8. 最新ECSHOP解闷商城系统+休闲娱乐EC购物商城源码
  9. java架构师证书_java架构师证书怎么考?做架构师有什么要求?
  10. 一些实用型的工具及网站
  11. 新型智慧城市顶层规划与设计方案
  12. 用JAVA编程的数字时钟代码
  13. 关于“父虚拟磁盘在子虚拟磁盘创建之后被修改过。……打不开磁盘啥啥啥”的解决方法
  14. 手机抓包软件:charles安装及教程
  15. deepin20 外接显示器,标题栏美化
  16. 企业业务的 WPA3 安全性为啥如此重要?
  17. 24L01配置函数详解
  18. 计算机三级网络技术最全知识点总结三
  19. 循环冗余校验码CRC原理和实例
  20. 新闻客户端的三种模式和四种活法

热门文章

  1. MVC开发Markdown编辑器(1)
  2. To be a true man
  3. 在路由器上设置虚拟ftp服务器,怎么在路由器上开启ftp服务器配置
  4. php中空心字体怎么打,php打印一个边长为N的实心和空心菱型的方法
  5. 几种常见窗函数及其MATLAB程序实现
  6. matlab实现滑动平均滤波(二)
  7. 关于sigma pix的理解
  8. 遗传和基因突变对神经网络训练的好处
  9. uC/OS-II源码分析(四)
  10. Redis应用场景说明与部署