题意:

给定一个有向图,每条边都有一个权值,每次你可以选择一个结点和一个整数的,把所有以v为终点的边的权值减去d,

把所有以v为起点的边的权值加上d

最后要让所有边的权的最小值非负且尽量大

代码

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int N = 1e3;
const int inf  = 0x3f3f3f3f;
int dist[N],inq[N],cnt[N];
struct node
{int v,w;node(int v,int w):v(v),w(w) {};
};
vector<node> G[N];
void init(int n)
{for(int i = 0; i<=n; i++) G[i].clear();
}
bool spfa(int n)
{queue<int> q;q.push(0);memset(inq,0,sizeof(inq));memset(cnt,0,sizeof(cnt));memset(dist,inf,sizeof(dist));dist[0] = 0;inq[0] = 1;cnt[0] = 1;while(!q.empty()){int u = q.front();q.pop();inq[u] = 0;for(int i = 0; i<G[u].size(); i++){int v = G[u][i].v, w= G[u][i].w;if(dist[v]>dist[u] + w){dist[v] = dist[u] + w;if(!inq[v]) q.push(v),inq[v] = 1;if(++cnt[v]>n) return true;}}}return false;
}
bool test(int mid,int n)
{for(int i = 1; i<=n; i++)for(int j = 0; j<G[i].size(); j++)G[i][j].w -=mid;int ret = spfa(n);for(int i = 1; i<=n; i++)for(int j = 0; j<G[i].size(); j++)G[i][j].w +=mid;return ret;
}
int main()
{int V,E;while(~scanf("%d%d",&V,&E)){init(V);int ub = 0;int u ,v ,w;for(int i = 0; i<E; i++){scanf("%d%d%d",&u,&v,&w);G[u].push_back(node(v,w));ub = max(w,ub);}for(int i = 1; i<=V; i++)G[0].push_back(node(i,0));int L = 1, R = ub;if(test(L,V)) puts("No Solution");else if(!test(ub+1,V)) puts("Infinite");else{while(L<R){int mid = L + (R -L)/2;if(test(mid,V)) R = mid ;else  L = mid + 1;}printf("%d\n",L-1);}}return 0;
}

转载于:https://www.cnblogs.com/jiachinzhao/p/4937583.html

UVA 11478(差分约束 + 二分)相关推荐

  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. Luogu4926 倍杀测量者(二分答案+差分约束)

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

  4. hdu1529 差分约束(好题)

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

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

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

  6. 【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 ...

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

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

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

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

  9. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

最新文章

  1. 真·无监督!延世大学提出图像到图像无监督模型,实验结果超SOTA
  2. java 反射 orm_Java-反射机制简介
  3. lamda表达式 随机取数据的方法
  4. python pip 安装与使用_Python pip 安装与使用(安装、更新、删除)
  5. Linux UOS(国产统信)系统下Qt无法打印日志的问题
  6. 配置审计(Config)配合开启OSS防盗链功能
  7. Java 类的特性1
  8. java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)
  9. propertyeditor java_PropertyEditor使用
  10. 76.Nodejs Express目录结构
  11. Python3 OpenCV
  12. mysql 修改root密码 修改账户登录host
  13. 【月径流预测】基于matlab人工生态系统算法优化BP神经网络月径流预测【含Matlab源码 2000期】
  14. 自定义View在android2.3.3手机上正常运行 在android4.2.2手机上报空指针
  15. PB调用WebService
  16. 数据库三范式和BCNF范式的理解:生动举例
  17. VUE vue Expected Object, Function, got String with value “xxx;
  18. 台式机,在不能连网线的情况下,如何连接WiFi呢?
  19. [教程]在VS上使用scanf,解决scanf报错问题
  20. C语言数组名、数组名取地址、数组首元素地址之间的关系

热门文章

  1. VUE 相关问题积累
  2. kernel 3.2.0 上加入自己的板级文件
  3. IP地址转化为32位无符号数
  4. 18Python标准库系列之logging模块
  5. [Linux] PHP程序员玩转Linux系列-自动备份与SVN
  6. 请谨慎设置WinForm控件DataGridView列的AutoSizeMode属性
  7. 《神经网络》学习笔记
  8. 在线数据分析4大常用功能
  9. 认识大数据分析的四大误区
  10. 物联网卡得持续增长对企业带来怎样的挑战