杭电oj1384--Intervals(差分约束)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1384
题意: N 表示有几组测试数据, a , b, c -- >[a, b] 表示一个闭区间, c 表示闭区间内符合条件的点数。 求满组符合N个条件所需最少的点。
这种题主要是找约束方程。
约束方程有两个:(不得不吐个槽, 真nm不好想),设 s[i] 为0 ~ i在集合Z中满足点的个数, 集合Z为最终所求集合;
1、在集合[a, b]中, s[a+1] - s[b] >= c . (注意集合长度、 这里要用最长路解决问题----->注意建边方向)。
2、1 >= s[i+1] - s[i] >= 0; (这条件不太明显,Nm-.-\). 转化一下---> s[i] >= s[i-1] - 1 && s[i + 1] >= 0 + s[i]方向!!!) yuan point = imPoRtant.
#include <cstdio>
#include <cstring>
#include <iostream>
#define min(a, b) a<b? a:b
#define max(a, b) a>b? a:b
using namespace std;
const int INF = 0x3f3f3f3f;
int dis[50010], vis[50010], Min, Max;
struct Edge
{
int from, to, val, next;
} edge[50005*3];
int head[50005], cnt;
void Add(int a, int b, int c)
{
Edge E = {a, b, c, head[a]};
edge[cnt] = E;
head[a] = cnt++;
}
void Spfa()
{
for(int i = Min; i <= Max; i++)
dis[i] = -INF;
dis[Min] = 0; //最长路;
queue<int> Q;
Q.push(Min);
while(!Q.empty())
{
int u = Q.front(); Q.pop();
vis[u] = 0;
for(int i = head[u]; i != -1; i = edge[i].next)
{
int v = edge[i].to;
if(dis[v] < dis[u] + edge[i].val)
{
dis[v] = dis[u] + edge[i].val;
if(!vis[v])
{
vis[v] = 1;
Q.push(v);
}
}
}
}
printf("%d\n", dis[Max]);
}
int main()
{
int N;
while(~scanf("%d", &N))
{
Min = INF; Max = -INF; cnt = 0;
memset(vis, 0, sizeof(vis));
memset(edge, 0, sizeof(edge));
memset(head, -1, sizeof(head));
for(int i = 0; i < N; i++)
{
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
Add(u, v+1, w); //s[a+1] - s[b] >= c ;
Min = min(Min, u); //找大致区间;
Max = max(Max, v+1);
}
for(int i = Min; i < Max; i++)
{
Add(i, i+1, 0); //双向边, 权值不同。1 >= s[i+1] - s[i] >= 0---> s[i] >= s[i-1] - 1 && s[i + 1] >= 0 + s[i]
Add(i+1, i, -1);
}
Spfa();
}
return 0; }
转载于:https://www.cnblogs.com/soTired/p/4779783.html
杭电oj1384--Intervals(差分约束)相关推荐
- poj 1201 Intervals 差分约束
真 .读题杀,英文题一脸懵逼,看来以后还要多读读英文题,不过读完了就能发现这其实是一道很裸的差分约束,按照题意建边即可,但还要注意的就是后一个要大于等于前一个,并且每个位置不能超过一个元素.求一边最大 ...
- POJ - 1201 Intervals(差分约束+最短路)
题目链接:点击查看 题目大意:给定n个闭区间[ai,bi]和n个整数ci,你需要构造一个整数集合Z,使得Z中满足所有的ai<=x<=bi的整数不少于ci个,求出这样的整数集合Z最少包含多少 ...
- poj1201/zoj1508/hdu1384 Intervals(差分约束)
转载请注明出处: http://www.cnblogs.com/fraud/ --by fraud Intervals Time Limit: 10 Seconds Me ...
- poj-1201 Intervals(差分约束)
题目链接: Intervals Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 24379 Accepted: 9274 ...
- POJ 1716 Integer Intervals 差分约束
题目:http://poj.org/problem?id=1716 1 #include <stdio.h> 2 #include <string.h> 3 #include ...
- 差分约束 1:pku 1201 Intervals 2:pku 1364 King 3:hdu 1534
一个很好的差分约束总结:http://972169909-qq-com.iteye.com/blog/1185527 第一: 感觉难点在于建图 第二: ①:对于差分不等式,a - b <= ...
- HDU 1384 Intervals【差分约束-SPFA】
类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径]. 例子:b−a<=k1,c−b& ...
- POJ 1716 Integer Intervals【差分约束】
题意: 知道了数轴上的n个区间,每个区间都是连续的int区间,现在要在数轴上任意取一堆元素,构成一个元素集合V要求每个区间和元素集合V的交集至少有两个不同的元素 求集合V最小的元素个数. 转一分析:( ...
- POJ1201 Intervals 【差分约束】
题目链接 POJ1201 题解 差分约束 令\(a[i]\)表示是否选择\(i\),\(s[i]\)表示\(a[i]\)的前缀和 对\(s[i] \quad i \in [-1,50000]\)分别建 ...
最新文章
- Verilog RTL 代码设计示例
- Mysql基础知识:索引
- 管理实践-教练技术的应用
- 参加管理课程所获的 之一
- python list中append()与extend()用法
- java des加密解密_Java实现的DES加密解密工具类实例
- 2013再见,2014你好!
- php用win还是linux系统,做网站选择linux系统还是选择windows系统好?
- Latex初学入门记载
- Markdown——让你专注写作
- 银行客户用户画像_大数据精准营销用户画像是核心-金融业大数据用户画像实践...
- easyphp mysql 密码_EasyPHP 使用经验积累
- 商业智慧:创造奇迹的信件
- wifi和服务器之间通信协议,安卓和wifi通信协议
- python:ImportError: cannot import name ‘xx‘ from ‘xxxx‘
- NOI2002银河英雄传说——带权并查集
- JavaScript 编程题
- 资金、时间、盈利“三杀坎”,外卖尾部平台如何求生?
- c语言程序设计振动合成,C语言课程设计-振动波的合成原理
- 《HEAD FIRST JAVA》第一次回顾和整理
热门文章
- oracle游标声明中使用变量赋值,Oracle游标使用方法(游标里使用变量绑定)
- python ascii函数二进制_python模块介绍- binascii:二进制和ASCII互转以及其他进制转换...
- 三调 图斑地类面积_国土三调攻坚冲刺,大疆无人机为调查举证提供加速度
- Java学习总结:20
- Java项目:学生信息管理系统(java+SSM+jsp+mysql+maven)
- 【spring】p命名空间的使用
- 实验1 应用SQL Server进行数据定义和管理
- c语言——求单词个数
- qt4的quick程序升级到qt5_最新8月书单出炉!送给你程序员
- iOS - APP任意push新页面那些事