题意:

给定一个有向图,每条边都有一个权值,每次你可以选择一个结点和一个整数的,把所有以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;
}

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

  1. 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 ...

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

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

  3. POJ 1364 King (UVA 515) 差分约束

    http://poj.org/problem?id=1364 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...

  4. hdu1529 Cashier Employment[差分约束+二分答案]

    这题是一个类似于区间选点,但是有一些不等式有三个未知量参与的情况. 依题意,套路性的,将小时数向右平移1个单位后,设$f_i$为前$i$小时工作的人数最少是多少,$f_{24}$即为所求.设$c_i$ ...

  5. UVA 515 差分约束 SPFA判负

    第一次看这个题目,完全不知道怎么做,看起来又像是可以建个图进行搜索,但题目条件就给了你几个不等式,这是怎么个做法...之后google了下才知道还有个差分约束这样的东西,能够把不等式化成图,要求某个点 ...

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

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

  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 its n ...

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

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

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

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

随机推荐

  1. 使用poi将excel转换为html,适用本身有导出excel的而现在需要添加网页打印的功能

    PoiExcelToHtmlUtil.java import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.hssf.usermod ...

  2. 使用inotify-tools与rsync构建实时备份系统

    使用inotifywait监控文件变动 inotifywait是 inotify-tools 包中提供的一个工具,它使用 inotify API 来监控文件/目录中的变动情况. 在archlinux上 ...

  3. 【shopex】真正可用的app开发机制

    shopex的app开发机制详解   网上流传的shopex4.8.5的app开发教程,不仅说得不明不白,而且由于版本问题,照着做根本是做不成的. 知其然,亦要知其所以然. shopex提供了的一个干 ...

  4. &、|、~与&&、||、! 谬误

    按位运算符(&.|.~)的操作是被默认为一个二进制的位序列,分别对其中的每个位进行操作. 逻辑运算符(&&.||.!)将操作数当成非真及假,非假及真.通常就是将0当成假,非0即 ...

  5. R-biomaRt使用-代码备份

    目标:使用R脚本从ensembl上下载transcript数据 简单粗暴,直接上代码.biomaRt的介绍晚一点更新. # this file helps extract information fr ...

  6. 裸机——DDR

    1.DDR介绍 DDR,是SDRAM的改进,是双通道的SDRAM, SDRAM是同步动态随机访问存储器. SDRAM与SRAM相对于,二者的特点是: SDRAM 需要初始化,使用时许访问,价格便宜. ...

  7. MongoDB的Go语言驱动注意点

    当我们定义一个struct用来和集合对应时,要注意结构体的字段首字母应该大写,不然不可见. 通过`bson:"name"`这种方式可以定义MongoDB中集合的字段名,如果不定义, ...

  8. [KMP][BZOJ1355][Baltic2009]Radio Transmission

    题面 Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,\(1 < L ...

  9. pyplot基础图表函数概述

    pyplot饼图的绘制 pyplot直方图的绘制 极坐标图的绘制

  10. 17 rest-framework框架的基本组件

    序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式.我们可以通过声明与Django ...