POJ1201 差分约束
给定ai,bi, ci 表示区间[ai,bi]内至少有ci个点, 要求对于所有给定的ai,bi,ci, 至少多少个点才能满足题目的条件
重做这一题学到的一点是, 可以设变量来表示一些东西,然后才能找出约束的条件, s[i]表示区间0到i内有多少个点, 那么s[bi] - s[ai-1] >= ci 就是约束的条件
当然了,也有隐藏的条件 1>= s[i] - s[i-1] >=0
可以用最长路来求这一题,最短路当然也是可以的。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <math.h>
#pragma warning(disable:4996)
#pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
using namespace std;
const int INF = <<;
const int N = + ;
struct Node
{
int to, dist, next;
bool operator<(const Node&rhs)const
{
return dist < rhs.dist;
}
}g[N];
int head[N], e;
int dist[N];
void addEdge(int a, int b, int c)
{
g[e].to = b;
g[e].dist = c;
g[e].next = head[a];
head[a] = e++;
}
int dij(int x, int y)
{
priority_queue<Node> q;
for (int i = x; i <= y; ++i)
dist[i] = -INF;
Node cur, tmp;
dist[x] = cur.dist = ;
cur.to = x;
q.push(cur);
while (!q.empty())
{
cur = q.top(); q.pop();
int u = cur.to;
if (dist[u] > cur.dist)
continue;
for (int i = head[u]; i != -; i = g[i].next)
{
int v = g[i].to;
if (dist[v] < dist[u] + g[i].dist)
{
tmp.dist = dist[v] = dist[u] + g[i].dist;
tmp.to = v;
q.push(tmp);
}
}
}
return dist[y];
}
int main()
{
int n, Min, Max, a, b, c;
Node tmp;
while (scanf("%d", &n) != EOF)
{
e = ;
memset(head, -, sizeof(head));
Min = INF, Max = -INF;
for (int i = ; i <= n; ++i)
{
scanf("%d%d%d", &a, &b, &c);
a++;
b++;
Min = min(a - , Min);
Max = max(b, Max);
addEdge(a - , b, c);
}
for (int i = Min+; i <= Max; ++i)
{
addEdge(i - , i, );
addEdge(i, i - , -); }
printf("%d\n", dij(Min, Max));
}
return ;
}
POJ1201 差分约束的更多相关文章
- POJ1201 Intervals 【差分约束】
题目链接 POJ1201 题解 差分约束 令\(a[i]\)表示是否选择\(i\),\(s[i]\)表示\(a[i]\)的前缀和 对\(s[i] \quad i \in [-1,50000]\)分别建 ...
- POJ1201 Intervals(差分约束)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 10966 Description You ...
- POJ1201:Intervals(差分约束)
差分约束经典题.设s[i]为前缀和,则有 s[i]-s[i-1]<=1 (i往i-1连-1的边) s[i]>=s[i-1] (i-1往i连0的边) s[b]-s[a-1]>=c (a ...
- POJ1201 Intervals (差分约束)
You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a program that: ...
- POJ1201:Intervals【差分约束】
题目大意:给出N个闭区间,每个区间给出一个ci值,让你找出最小的数集Z使得每个闭区间都有不少于ci个Z中的元素,求card(Z) 思路:06年集训队论文<浅析差分约束系统>有详细的解题,设 ...
- poj1201 Intervals——差分约束
题目:http://poj.org/problem?id=1201 差分约束裸题: 设 s[i] 表示到 i 选了数的个数前缀和: 根据题意,可以建立以下三个限制关系: s[bi] >= s[a ...
- POJ1201基础差分约束
题意: 有一条直线,直线上做多有50000个点,然后给你组关系 a b c表明a-b之间最少有c个点,问直线上最少多少个点. 思路: a-b最少有c个点可以想象a到b+1的距 ...
- Intervals(差分约束)
http://poj.org/problem?id=1201 题意:给出N个整数区间[ai,bi],并且给出一个约束ci,( 1<= ci <= bi-ai+1),使得数组Z在区间[ai, ...
- K - Candies(最短路+差分约束)
题目大意:给N个小屁孩分糖果,每个小屁孩都有一个期望,比如A最多比B多C个,再多了就不行了,会打架的,求N最多比1多几块糖 分析:就是求一个极小极大值...试试看 这里需要用到一个查分约束的东西 下面 ...
随机推荐
- Swift - 类型判断is 与 类型转换as
在Swift中,通常使用is和as操作符来实现类型检查和转换.下面通过样例来演示使用方法,首先定义几个类. 1 2 3 4 5 6 7 8 9 10 11 //基类,人类 class Human{ } ...
- java Date 和 javascript Date
近期写一个页面.上面要展示下日期. 在Java中生成了Date.然后将这个Date通过velocity送入vm模板其中 代码例如以下: var dates = new Date("$!{pp ...
- 2013Esri全球用户大会之ArcGIS for Desktop
Q1:ArcGIS 10.2 for Desktop中有哪些新特性? 增强的质量和性能 扩展并行处理能力 许多软件质量的改进 优化的文件处理 ...
- C语言函数调用约定
在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用这个函数.但是,当高级语言被编译 ...
- ifconfig 源码
贴一下ifconfig的源码(它属于net-tool软件包),以备平时查看网络信息的配置. /* * ifconfig This file contains an implementation of ...
- 计算机视觉与模式识别代码合集第二版one
Topic Name Reference code Feature Detection, Feature Extraction, and Action Recognition Space-Time I ...
- 如何开发auto complete 智能提示功能
目录(?)[+] 如何开发auto complete 智能提示功能 最近网上好像流传用redis实现,其实智能提示和用什么存储关系不大 07年,我过一个类似的项目 我有几千个名字,随着用户在输入框中不 ...
- Java基础之数组序列化、反序列化 小发现(不知道 是不是有问题)
结论: 数组,无论是否声明为transient,都是可以序列化.反序列化的. 测试情况如下: 1.两种类型的数组:int .String: 2 声明为transient 或者不做任何修饰:. 3. ...
- 沙朗javascript总结一下(一)---基础知识
我也听说过Javascript这东西.我一直感觉很神奇,但它并没有去太懂.今天,牛腩哥哥随后的初步研究,一些浅显的认识.就先总结一下. 首先,什么是javascript? javascript是一种直 ...
- CheckBox和RadioButton以及RadioGroup
CheckBox:复选框 有两种状态 选中状态(true),未选状态(false) 属性 android:checked= "false"(表示该复选框未被选中) RadioGro ...