Intervals(poj1201)
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 24134 | Accepted: 9177 |
Description
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
Output
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;
}
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 13511 | Accepted: 5756 |
Description
Write a program that: finds the minimal number of elements in a set containing at least two different integers from each interval.
Input
Output
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)的更多相关文章
- Integer Intervals(贪心)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12123 Accepted: 5129 Description An i ...
- 【leetcode】Merge Intervals(hard)
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- 1089 Intervals(中文版)
开始前先讲几句废话:这个题我开始也没看懂,后来借助百度翻译,明白了大概是什么意思. 试题描述 输入一个n,然后输入n组数据,每个数据有两个数,代表这个闭区间是从几到几.然后看,如果任意两个闭区间有相重 ...
- LeetCode: 56. Merge Intervals(Medium)
1. 原题链接 https://leetcode.com/problems/merge-intervals/description/ 2. 题目要求 给定一个Interval对象集合,然后对重叠的区域 ...
- [LeetCode]题解(python):056-Merge Intervals
题目来源 https://leetcode.com/problems/merge-intervals/ Given a collection of intervals, merge all overl ...
- poj1716 Integer Intervals(差分约束)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Integer Intervals Time Limit: 1000MS Me ...
- POJ 1384 Intervals (区间差分约束,根据不等式建图,然后跑spfa)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1384 Intervals Time Limit: 10000/5000 MS (Java/Others ...
- 【POJ 1716】Integer Intervals(差分约束系统)
id=1716">[POJ 1716]Integer Intervals(差分约束系统) Integer Intervals Time Limit: 1000MS Memory L ...
- 【POJ 1201】 Intervals(差分约束系统)
[POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS Memory Limit: ...
随机推荐
- 4.Reverse Words in a String-Leetcode
class Solution { public: void reverseWords(string &s) { vector<string> data; string word; ...
- mysql 分组统计、排序、取前N条记录解决方案
需要在mysql中解决记录的分组统计.排序,并抽取前10条记录的功能.现已解决,解决方案如下: 1)表结构 CREATE TABLE `policy_keywords_rel` ( `id` int( ...
- 如何优雅地将printf的打印保存在文件中?
我们都知道,一般使用printf的打印都会直接打印在终端,如果想要保存在文件里呢?我想你可能想到的是重定向.例如: $ program > result.txt 这样printf的输出就存储在r ...
- 学习java的第十天
一.今日收获 1.java完全学习手册第二章2.9程序流程控制中的选择结构与顺序结构的例题 2.观看哔哩哔哩上的教学视频 二.今日问题 1.例题的问题不大,需要注意大小写,新的语句记忆不牢 2.哔哩哔 ...
- day13 grep命令
day13 grep命令 linux三剑客之grep命令 介绍 grep(global search regular expression(RE) and print out the line,全面搜 ...
- C语言内自定义汇编函数&调用约定
探究如何在C语言里直接自写汇编函数 裸函数 裸函数与普通函数的区别 普通函数在经过编译器编译时,编译器自动生成保护现场,恢复现场等反汇编代码 当我们想要自己实现函数内部的汇编代码时,就可以告诉汇编器不 ...
- Docker学习(一)——安装docker
Suse12上安装docker 对于suse13.2之后的版本,因为docker已经被添加到了suse仓库中,直接使用sudo zypper install docker即可. suse12不 ...
- JVM——内存分配与回收策略
1.对象优先在Eden区分配 大多数情况下,对象在新生代Eden区分配.当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC. 虚拟机提供了 -XX:+PrintGCDetails这 ...
- Output of C++ Program | Set 12
Predict the output of following C++ programs. Question 1 1 #include <iostream> 2 using namespa ...
- Android 实现微信QQ分享以及第三方登录
集成准备 在微信开放平台创建移动应用,输入应用的信息,包括移动应用名称,移动应用简介,移动应用图片信息,点击下一步,选择Android 应用,填写信息提交审核. 获取Appkey 集成[友盟+]SDK ...