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

【思路】

差分约束系统。

设结点u上的操作和为sum[u],则边(u,v)权值为d-sum[v]+sum[u]。对于最小值最大问题我们想到二分答案,设二分值为x,则问题变为判断最小值为x时题目是否存在解。对于权值我们有不等式d-sum[v]+sum[u]>=x  =>  sum[v]<=sum[u]+(d-x),由此可以建立差分约束系统。

无解:如果最小值为1时依然不成立。

任意解:如果最小值为R+1时成立。

否则二分答案取最大值,当图中有负权环时差分约束系统无解即二分答案不成立。

【代码】

 #include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std; const int maxn = +; int n,m;
struct Edge { int u,v,w;
};
vector<int> G[maxn];
vector<Edge> es;
void addedge(int u,int v,int w) {
es.push_back((Edge){u,v,w});
int m=es.size(); G[u].push_back(m-);
}
bool spfa() {
queue<int> q;
int inq[maxn],d[maxn],cnt[maxn];
memset(inq,,sizeof(inq));
memset(cnt,,sizeof(cnt));
for(int i=;i<=n;i++)
d[i]= , inq[i]= , q.push(i);
while(!q.empty()) {
int u=q.front(); q.pop(); inq[u]=;
for(int i=;i<G[u].size();i++) {
Edge e=es[G[u][i]];
int v=e.v;
if(d[v]>d[u]+e.w) {
d[v]=d[u]+e.w;
if(!inq[v]) {
inq[v]= , q.push(v);
if(++cnt[v]>(n)) return false;
}
}
}
}
return true;
}
bool can(int x) {
for(int i=;i<es.size();i++) es[i].w-=x;
bool ans=spfa();
for(int i=;i<es.size();i++) es[i].w+=x;
return ans;
} int main() {
while(scanf("%d%d",&n,&m)==) {
es.clear();
for(int i=;i<=n;i++) G[i].clear();
int u,v,w;
int L=,R=;
for(int i=;i<m;i++) {
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w); R=max(R,w);
}
if(can(R+)) printf("Infinite\n");
else if(!can()) printf("No Solution\n");
else {
while(L<R) {
int M=L+(R-L+)/;
if(can(M)) L=M; else R=M-;
}
printf("%d\n",L);
}
}
return ;
}

UVA 11478 Halum(差分约束)的更多相关文章

  1. UVA 11478 Halum (差分约束)

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

  2. Halum UVA - 11478(差分约束 + 二分最小值最大化)

    题意: 给定一个有向图,每条边都有一个权值,每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权值减小d,把所有以v为起点的边的权值增加d,最后要让所有边权的最小值非负且尽量大 两个特判 1 ...

  3. UVA - 11478 - Halum(二分+差分约束系统)

    Problem  UVA - 11478 - Halum Time Limit: 3000 mSec Problem Description You are given a directed grap ...

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

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

  5. UVA 11478 Halum

    Halum Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID: 114 ...

  6. UVA - 11478 Halum 二分+差分约束

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34651 题意: 给定一个有向图,每一条边都有一个权值,每次你可以 ...

  7. Uva 11478 Halum操作

    题目链接:http://vjudge.net/contest/143318#problem/B 题意:给定一个有向图,每条边都有一个权值.每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权 ...

  8. Halum UVA - 11478 差分约束

    输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 复制 2 1 1 2 10 2 1 1 2 -10 3 3 1 2 4 2 3 2 3 1 5 4 5 2 3 4 4 2 5 3 ...

  9. 训练指南 UVA - 11478(最短路BellmanFord+ 二分+ 差分约束)

    layout: post title: 训练指南 UVA - 11478(最短路BellmanFord+ 二分+ 差分约束) author: "luowentaoaa" catal ...

随机推荐

  1. 怎样使用svn开发项目

    那么首先什么是svn呢?官方有很好的解释,我说一下个人简单的理解,svn就是开源的版本控制软件, 那么什么是版本呢?简单的说版本就是标记,比如你买了一本书,同样的书名,但是版本不一定一样, 因为里面可 ...

  2. xml中报错,验证是否是xml报错

    1.xml中写入sql有时报错,例如有大于号小于号,要用<![CDATA[                  ]]>扩起来 2.验证xml有错的方式,以浏览器方式打开,如果正常打开,无错. ...

  3. const和volatile的区别

    一.关键字const有什么含意? 只要一听到说:“const意味着常数”,就知道我正在和一个业余者打交道.去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embe ...

  4. Html5实现头像上传和编辑,保存为Base64的图片过程

    一.Html5实现头像上传和编辑 插件地址: html5手机端裁剪图片上传头像代码 本地项目引入注意事项: 1.将html的js搬到外面的js文件中,便于管理 2.图片样式在html都是在页面写死,需 ...

  5. 序列数据挖掘[ZZ]

    一.时间序列数据挖掘 时间序列是数据存在的特殊形式,序列的过去值会影响到将来值,这种影响的大小以及影响的方式可由时间序列中的趋势周期及非平稳等行为来刻画.一般来讲,时间序列数据都具有躁声.不稳定.随机 ...

  6. 对 const char* const &a 的理解

    定义中用到&是独立引用. 比如: char i; char &a=i; 表示a是i的一个单独引用. 当有i='a'时,也有a='a'; 当有a='c'时,也有i='c'; 两个变量的标 ...

  7. Excel等外部程序点击链接会带上IE信息的bug

    今天碰到一个问题,在Excel内点击链接到默认浏览器Chrome打开,奇怪的是服务端收到的Session一直对不上. 查了很久发现这个Excel到Chrome的跳转竟然带上了IE的Cookie 和 U ...

  8. Devexpress Barmanager设置

    一,在bar的属性中有optionbar,可以做一些设置. 其中比较有用的是:1,去掉最右边的箭头:allowquickcustomization 改为false 2,去掉最左边的竖线:drawdra ...

  9. ICE学习第一步-----配置ICE环境变量

    安装 ICE: 1.下载ICE: http://www.zeroc.com/download.html 下载说明:ICE支持语言(C++, Java, C#, Visual Basic,Python, ...

  10. HTML5 拖拽 & fabric 插件

    ### 拖拽 //html <div ondrop="drop(event)" ondragover="allowDrop(event)">< ...