POJ 1201 差分约束(集合最小元素个数)
来源:互联网 发布:php 执行lua脚本 编辑:程序博客网 时间:2024/04/30 01:10
题意:
给你一个集合,然后有如下输入,a ,b ,c表示在范围[a,b]里面有至少有c个元素,最后问你整个集合最少多少个元素。
思路:
和HDU1384一模一样,首先这个题目可以用差分约束来解决,是大于等于所以跑最长路(如果非要跑最短路建-权也可以),说下建图,首先我们把每个区间抽象出来,区间的两个端点之间的元素个数 [a ,b] = c 可以抽象成 点a,和点(b + 1)之间的距离 大于等于c,那么这样就可以把输入建进去了,还有个关键的地方就是题目的隐含条件,一般的查分约束的关键都是在于找隐含条件,这个题目的隐含条件就是相邻的
给你一个集合,然后有如下输入,a ,b ,c表示在范围[a,b]里面有至少有c个元素,最后问你整个集合最少多少个元素。
思路:
和HDU1384一模一样,首先这个题目可以用差分约束来解决,是大于等于所以跑最长路(如果非要跑最短路建-权也可以),说下建图,首先我们把每个区间抽象出来,区间的两个端点之间的元素个数 [a ,b] = c 可以抽象成 点a,和点(b + 1)之间的距离 大于等于c,那么这样就可以把输入建进去了,还有个关键的地方就是题目的隐含条件,一般的查分约束的关键都是在于找隐含条件,这个题目的隐含条件就是相邻的
两个点的元素个数 >= 0 && <= 1,其他的没啥了。
#include<stdio.h>#include<string.h>#include<queue>#define N_node 55000#define N_edge 210000#define INF 100000000000000using namespace std;typedef struct{ int to ,next; __int64 cost;}STAR;STAR E[N_edge];int list[N_node] ,tot;__int64 s_x[N_node];void add(int a ,int b ,__int64 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; int mark[N_node] = {0}; int in[N_node] = {0}; s_x[s] = 0; mark[s] = in[s] = 1; queue<int>q; q.push(s); 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; q.push(xin); if(++in[xin] > n) return 0; } } } } return 1;}int maxx(int x ,int y){ return x > y ? x : y;}int minn(int x ,int y){ return x < y ? x : y;}int main (){ int n ,a ,b ,i; __int64 c; while(~scanf("%d" ,&n)) { memset(list ,0 ,sizeof(list)); tot = 1; int Max = 0 ,Min = 100000000; for(i = 1 ;i <= n ;i ++) { scanf("%d %d %I64d" ,&a ,&b ,&c); b ++; add(a ,b ,c); Max = maxx(Max ,b); Min = minn(Min ,a); } for(i = Min ;i <= Max ;i ++) { add(i - 1 ,i ,0); add(i ,i - 1 ,-1); } spfa(Min ,Max); printf("%I64d\n" ,s_x[Max]); } return 0;}
0 0
- POJ 1201 差分约束(集合最小元素个数)
- poj 1201 Intervals(差分约束)
- POJ 1201 (差分约束)
- POJ 1201 Intervals(差分约束)
- poj 1201 Intervals (差分约束)
- poj 1201 Intervals(差分约束)
- POJ 1201 (差分约束)
- poj 1201 Intervals(差分约束)
- poj 1201(差分约束)
- POJ-1201-Intervals(差分约束)
- POJ 1201 Intervals(差分约束)
- POJ-1201 Intervals(差分约束)
- POJ 1201 Intervals (差分约束)
- poj 1201 差分约束
- poj 1201 差分约束
- POJ 1201 差分约束
- POJ 1201 差分约束
- POJ 1201 差分约束
- 多条件查询DataTable返回DataTable
- FindFile FindNextFile 如何遍历一个文件夹并获取里面文件的信息
- 新人学编程必看——HTML学习资料
- java DecimalFormat, NumberFormat 格式化十进制数字
- Asp.Net MVC4开发一:概要
- POJ 1201 差分约束(集合最小元素个数)
- IOS8刷机之后
- oracle数据库的数据库名、实例名、ORACLE_SID
- UITableView刷新数据
- iOS学习笔记(十五)——数据库操作(SQLite)
- Ubuntu中特殊符号命令
- 3-深度学习-自然语言模型
- 【解题报告】uva357_Let Me Count The Ways(让我来数数方案, dp, 完全背包)
- 华为G520联通版刷机包 新蜂V2.3 基于官方精简优化 稳定流畅