POJ1201基础差分约束
题意:
有一条直线,直线上做多有50000个点,然后给你组关系 a b c表明a-b之间最少有c个点,问直线上最少多少个点。
思路:
a-b最少有c个点可以想象a到b+1的距离是大于等于c的,还有一个隐含条件就是
0<=S[i] - S[i-1]<=1,差分约束的题目记住找隐含条件很重要,这样也就是一共三个条件,建边求最上路,记住查分约束求短要用最长路,求最长要用最短路,最长路的建边是
a ,b c
S[i-1] ,S[i] 0
S[i] ,S[i-1] -1
#include<queue>
#include<stdio.h>
#include<string.h>#define N_node 50000 + 100
#define N_edge 150000 + 10000
#define INF 1000000000using namespace std;typedef struct
{int to ,cost ,next;
}STAR;STAR E[N_edge];
int list[N_node] ,tot;
int s_x[N_node] ,mark[N_node] ,mkc[N_node];void add(int a ,int b ,int c)
{E[++tot].to = b;E[tot].cost = c;E[tot].next = list[a];list[a] = tot;
}bool SPFA(int s ,int n)
{for(int i = 0 ;i <= n ;i ++)s_x[i] = -INF ,mark[i] = mkc[i] = 0;queue<int>q;q.push(s);mark[s] = mkc[s] = 1;s_x[s] = 0;while(!q.empty()){int xin ,tou;tou = q.front();q.pop();mark[tou] = 0;for(int k = list[tou] ;k ;k = E[k].next){xin = E[k].to;if(s_x[xin] < s_x[tou] + E[k].cost){s_x[xin] = s_x[tou] + E[k].cost;if(!mark[xin]){mark[xin] = 1;if(++mkc[xin] > n) return 0;q.push(xin);}}}}return 1;
}int main ()
{int t ,i ,a ,b ,c ,m ,min ,max;while(~scanf("%d" ,&m)){memset(list ,0 ,sizeof(list));tot = 1;min = INF ,max = 0;for(i = 1 ;i <= m ;i ++){scanf("%d %d %d" ,&a ,&b ,&c);add(a ,++b ,c);if(min > a) min = a;if(max < b) max = b;}for(i = min + 1 ;i <= max ;i ++){add(i-1 ,i ,0);add(i ,i-1 ,-1);}SPFA(min ,max);printf("%d\n" ,s_x[max]);}return 0;
}
POJ1201基础差分约束相关推荐
- poj-1201 Intervals(差分约束)
题目链接: Intervals Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 24379 Accepted: 9274 ...
- POJ1201 Intervals 【差分约束】
题目链接 POJ1201 题解 差分约束 令\(a[i]\)表示是否选择\(i\),\(s[i]\)表示\(a[i]\)的前缀和 对\(s[i] \quad i \in [-1,50000]\)分别建 ...
- poj1201(差分约束+SPFA)
看到这道题,其实就是和poj1716是差不多的 题意:给出n个闭整数区间[ai,bi]和n个整数C1,.,cn.计算具有区间[ai,bi]的至少ci公共元素的整数集Z的最小大小,对于每一个i=1,2, ...
- POJ1201/ZOJ1508/HDU1384 Intervals(spfa解差分约束问题)
题意是说给出一些闭区间,这些区间上整点可以选择放一个元素或者不放,但是每个区间都有一个下限,就是说你在这个区间里面的元素个数不能低于这个下限值. 最后要求出最少需要几个元素才能满足每个区间的要求. 建 ...
- SUST 2019暑期集训题解(差分约束+生成树+传递闭包)
A 这个不等式组很眼熟吧 这道题的话上课讲过就是根据不等式建图然后跑一下最短路就可以了. #include<iostream> #include<cstring> #inclu ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- HDU3440(差分约束+SPFA算法)
题意:两栋房子之间的最大距离为D,也就是A-B<=D,现在求出最矮和最高房子之间的最大距离 思路:差分约束+SPFA算法: 当问题可以转化为形如一组 xi‑x'i<=yi 或一组 xi‑x ...
- HDU1531(差分约束+Bellman_ford)
题意:给出一个序列Si = {aSi, aSi+1, ..., aSi+ni} 和其子序列S = {a1, a2, ..., an}:在给出序列的约束条件: aSi + aSi+1 + ... + a ...
- poj3159(差分约束)
题意:其实题目要求的就是这个B-A<=c,所以对应单源最短路径中的d[v]>d[u]+e[u][v] 关于差分约束: 当问题可以转化为形如一组 xi‑x'i<=yi 或一组 xi‑x ...
最新文章
- 验证字符串是否为汉字
- 使用Python解析nginx日志文件
- 控制台 - 网络管理之华为交换机 S系列端口限速
- java delphi aes加密算法_Delphi AES,又一个加密算法例子
- 教程:正确的SLF4J日志记录用法以及如何检查它
- 视频干扰的原因及解决方法
- WordPress主题:自媒体二号大前端模板
- php 同步退出,Ucenter 的同步登录与同步退出
- SAP License:新总账的凭证分割
- Windows 2000命令行如何查看进程PID和杀进程
- 【剑指offer】面试题20:顺时针打印矩阵
- Vue.js 2.0 参考手册.CHM下载
- php 关于token、签名、加密的一点理解
- 真正的卡巴斯基key 教你使用正版KASPERSKY授权到2008年
- python 剔除nan_Pandas的数据清洗-删除NaN数据
- [EMNLP 2022] VIRT: Improving Representation-based Text Matching via Virtual Interaction
- LoRa SX1278通信代码开发学习
- 方块 游戏界面java_JAva 判断方块游戏清除方法
- 前端入门学习笔记(三十五)vue.js入门(三)条件 v-if 与循环 v-for,v-for 中 in 和 of 的区别
- match、search、findall用法区别
热门文章
- 基类和派生类中使用static_cast和dynamic_cast进行类型转换
- [译]15个关于Chrome的开发必备小技巧
- Centos/RedHat 7/6/5切换阿里云源并安装EPEL/IUS/REMI仓库
- Kettle调用Java类
- 无法删除xxx文档/文件夹:找不到指定的路径。请确定指定的路径是否正确
- 阅读器关闭时Read的尝试无效
- MFC:总结篇 CDialog 类
- Python3 中 爬网页 \uxxx 问题
- EOS开发基础之五:使用cleos命令行客户端操作EOS——智能合约之Exchange
- oracle 添加登陆数据库触发器--记录IP 地址