Intervals
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 24134   Accepted: 9177

Description

You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. 
Write a program that: 
reads the number of intervals, their end points and integers c1, ..., cn from the standard input, 
computes the minimal size of a set Z of integers which has at least ci common elements with interval [ai, bi], for each i=1,2,...,n, 
writes the answer to the standard output. 

Input

The first line of the input contains an integer n (1 <= n <= 50000) -- the number of intervals. The following n lines describe the intervals. The (i+1)-th line of the input contains three integers ai, bi and ci separated by single spaces and such that 0 <= ai <= bi <= 50000 and 1 <= ci <= bi - ai+1.

Output

The output contains exactly one integer equal to the minimal size of set Z sharing at least ci elements with interval [ai, bi], for each i=1,2,...,n.

Sample Input

5
3 7 3
8 10 3
6 8 1
1 3 1
10 11 1

Sample Output

6
差分约束系统模板题;转换为最短路来求解,关键是建图;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<queue>
#include<algorithm>
#include<iostream>
#include<vector>
void spaf(int n,int ans);
using namespace std;
const int N=1e9;
int d[30005*5];
bool flag[30005*5];
void add(int x,int y,int z,int co);
typedef struct pp
{
int x;
int y;
int cost;
int pre;
}ss;ss aa[30005*5];
int id[30005*5];
int main(void) {
int i,j,k,p,q;int z;
int maxx=0;
while(scanf("%d",&k)!=EOF) {int ans=0;
fill(id,id+30005*5,-1);
while(k--) {
scanf("%d %d %d",&p,&q,&z);
if(maxx<p)maxx=p;
if(maxx<q)maxx=q;
add(p-1,q,ans++,-z);
}
for(i=1; i<=maxx; i++) {
add(i-1,i,ans++,0);
add(i,i-1,ans++,1);
}spaf(0,maxx);printf("%d\n",-d[maxx]);
}
} void spaf(int n,int ans) {
fill(d,d+30005*5,N);
d[n]=0;
queue<int>que;int i;
memset(flag,0,sizeof(flag));
flag[n]=true;
que.push(n);
while(!que.empty()) {
int c=que.front();
que.pop();
flag[c]=false;
int x=id[c];
while(x!=-1)
{
int uu=aa[x].y;
if(d[uu]>d[c]+aa[x].cost)
{d[uu]=d[c]+aa[x].cost;
if(!flag[uu])
{que.push(uu);
flag[uu]=true;
}
}
x=aa[x].pre;
} }
}
void add(int x,int y,int z,int co)
{
aa[z].x=x;
aa[z].y=y;
aa[z].cost=co;
aa[z].pre=id[x];
id[x]=z;
}
Integer Intervals
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 13511   Accepted: 5756

Description

An integer interval [a,b], a < b, is a set of all consecutive integers beginning with a and ending with b. 
Write a program that: finds the minimal number of elements in a set containing at least two different integers from each interval.

Input

The first line of the input contains the number of intervals n, 1 <= n <= 10000. Each of the following n lines contains two integers a, b separated by a single space, 0 <= a < b <= 10000. They are the beginning and the end of an interval.

Output

Output the minimal number of elements in a set containing at least two different integers from each interval.

Sample Input

4
3 6
2 4
0 2
4 7

Sample Output

4
 1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 #include<queue>
5 #include<algorithm>
6 #include<iostream>
7 #include<vector>
8 void spaf(int n,int ans);
9 using namespace std;
10 const int N=1e9;
11 int d[30005];
12 bool flag[30005];
13 void add(int x,int y,int z,int co);
14 typedef struct pp
15 {
16 int x;
17 int y;
18 int cost;
19 int pre;
20 }ss;ss aa[30005];
21 int id[30005];
22 int main(void) {
23 int i,j,k,p,q;
24 int maxx=0;
25 while(scanf("%d",&k)!=EOF) {int ans=0;
26 fill(id,id+30005,-1);
27 while(k--) {
28 scanf("%d %d",&p,&q);
29 p++;
30 q++;
31 if(maxx<p)maxx=p;
32 if(maxx<q)maxx=q;
33 add(p-1,q,ans++,-2);
34 }
35 for(i=1; i<=maxx; i++) {
36 add(i-1,i,ans++,0);
37 add(i,i-1,ans++,1);
38 }spaf(0,maxx);printf("%d\n",-d[maxx]);
39 }
40 }
41
42 void spaf(int n,int ans) {
43 fill(d,d+30005,N);
44 d[n]=0;
45 queue<int>que;int i;
46 memset(flag,0,sizeof(flag));
47 flag[n]=true;
48 que.push(n);
49 while(!que.empty()) {
50 int c=que.front();
51 que.pop();
52 flag[c]=false;
53 int x=id[c];
54 while(x!=-1)
55 {
56 int uu=aa[x].y;
57 if(d[uu]>d[c]+aa[x].cost)
58 {d[uu]=d[c]+aa[x].cost;
59 if(!flag[uu])
60 {que.push(uu);
61 flag[uu]=true;
62 }
63 }
64 x=aa[x].pre;
65 }
66
67 }
68 }
69 void add(int x,int y,int z,int co)
70 {
71 aa[z].x=x;
72 aa[z].y=y;
73 aa[z].cost=co;
74 aa[z].pre=id[x];
75 id[x]=z;
76 }

Intervals(poj1201)的更多相关文章

  1. Integer Intervals(贪心)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12123   Accepted: 5129 Description An i ...

  2. 【leetcode】Merge Intervals(hard)

    Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...

  3. 1089 Intervals(中文版)

    开始前先讲几句废话:这个题我开始也没看懂,后来借助百度翻译,明白了大概是什么意思. 试题描述 输入一个n,然后输入n组数据,每个数据有两个数,代表这个闭区间是从几到几.然后看,如果任意两个闭区间有相重 ...

  4. LeetCode: 56. Merge Intervals(Medium)

    1. 原题链接 https://leetcode.com/problems/merge-intervals/description/ 2. 题目要求 给定一个Interval对象集合,然后对重叠的区域 ...

  5. [LeetCode]题解(python):056-Merge Intervals

    题目来源 https://leetcode.com/problems/merge-intervals/ Given a collection of intervals, merge all overl ...

  6. poj1716 Integer Intervals(差分约束)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Integer Intervals Time Limit: 1000MS   Me ...

  7. POJ 1384 Intervals (区间差分约束,根据不等式建图,然后跑spfa)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1384 Intervals Time Limit: 10000/5000 MS (Java/Others ...

  8. 【POJ 1716】Integer Intervals(差分约束系统)

    id=1716">[POJ 1716]Integer Intervals(差分约束系统) Integer Intervals Time Limit: 1000MS   Memory L ...

  9. 【POJ 1201】 Intervals(差分约束系统)

    [POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS   Memory Limit: ...

随机推荐

  1. Redis - 1 - linux中使用docker-compose安装Redis - 更新完毕

    0.前言 有我联系方式的那些半吊子的人私信问我:安装Redis有没有更简单的方式,网上那些文章和视频,没找到满意的方法,所以我搞篇博客出来说明一下我的安装方式吧 1.准备工作 保证自己的linux中已 ...

  2. pow()是如何实现的?

    如1.5 ** 2.5,如何计算?似乎是这样的: 1. cmath calculates pow(a,b) by performing exp(b * log(a)). stackoverflow 2 ...

  3. 源码分析-NameServer

    架构设计 消息中间件的设计思路一般是基于主题订阅发布的机制,消息生产者(Producer)发送某一个主题到消息服务器,消息服务器负责将消息持久化存储,消息消费者(Consumer)订阅该兴趣的主题,消 ...

  4. EasyExcel读写Excel

    使用过 poi 的开发同学可能都有此体会,每次都要写一坨代码,最后的代码如下面一样: 这样的代码是不是又臭又长?当字段数量多的时候,一不小心还容易写错.阿粉还记得当初使用 poi 导出一个二十多字段的 ...

  5. 【Linux】【Commands】trouble shooting命令详解目录

    1. 简介 1.1. 最近看到阿里的运维招聘需要熟练掌握以下的命令,我就针对这几个命令做一下总结,有些命令我觉得别人总结的挺好了,我就不赘述了 1.2. 还有一些其他我觉得用得到的命令的用法会在第三部 ...

  6. Java虚拟机(JVM)以及跨平台原理

    相信大家已经了解到Java具有跨平台的特性,可以"一次编译,到处运行",在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台 ...

  7. 页面屏蔽backspace键

    1 //页面加载完成 2 $(document).ready(function(){ 3 //禁止退格键 作用于Firefox.Opera 4 document.onkeypress = banBac ...

  8. JQuery 和 CSS 等选择器:

    JQuery 选择器: CSS 选择器:

  9. java 9+版本中,接口的内容总结

    java 9+版本中,接口的内容可以有: 1.成员变量其实是常量,格式: [public]  [static]  [final] 数据类型 常量名称=数据值: 注意: 常量必须进行赋值,而且一旦赋值不 ...

  10. [BUUCTF]REVERSE——不一样的flag

    不一样的flag 附件 步骤 例行查壳儿,32位程序,无壳儿 32位ida载入,shift+f12检索程序里的字符串,看到了如图标记的字符串,加上下面又上下左右的选项,估计是道迷宫类型的题目 将迷宫字 ...