[Sdwc] 线段
线段有如下两类特点:
1 x y, 表示第 x 条线段和第 y 条线段相交 (相交在这里指至少有一个公共点)
2 x y,表示第 x 条线段在第 y 条线段的左边,且它们不相交。
共有 m 个特点,每个特点都是如上两类之一。
通过这些特点推理得到每条线段的端点。
x与y相交说明a[x]<b[y]且a[y]<b[x]
x在y左边说明b[x]<a[y]
每条线段x还应满足a[x]<b[x]
这相当于一个拓扑排序问题,小的数相当于安排在前面的任务
输出的第i个数就是第i个任务,那么a[1]尽可能小说明任务1要尽可能早做,b[1]尽可能小说明任务2要尽可能早做……
方法就是把DAG反向建边得到新图,在新图中求字典序最大的拓扑排序,再将这个排序反序输出就是满足要求的答案
IMP:
求一个字典序最小的拓扑排序,正确的做法并不是尽量把小的塞到前面,
而是把大的尽量塞到后面。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
const int N = ;
int point[N],to[N],next[N],cc;
int dui[N],dcc;
int ru[N];
int sc[N];
int n,m;
void AddEdge(int x,int y) {
cc++;
next[cc]=point[x];
point[x]=cc;
to[cc]=y;
ru[y]++;
}
void Add(int x) {
dcc++;
int now=dcc;
int next=now/;
while(next && dui[next]<x) {
dui[now]=dui[next];
now=next;
next=now/;
}
dui[now]=x;
}
int Del() {
int val=dui[];
int now=;
int next=now*;
if(next+<dcc && dui[next+]>dui[next])
next++;
while(next<dcc && dui[next]>dui[dcc]) {
dui[now]=dui[next];
now=next;
next=now*;
if(next+<dcc && dui[next+]>dui[next])
next++;
}
dui[now]=dui[dcc];
dcc--;
return val;
}
int main() {
int i,j;
cin>>n>>m;
while(m--) {
int a,b,c;
cin>>c>>a>>b;
if(c==) {
AddEdge(a*,b*-);
AddEdge(b*,a*-);
} else
AddEdge(b*-,a*);
}
for(i=; i<=n; i++)
AddEdge(i*,i*-);
n*=;
for(i=; i<=n; i++) {
if(!ru[i])
Add(i);
}
for(i=n; i>=; i--) {
if(!dcc) {
printf("Wrong\n");
return ;
}
int now=Del();
int then=point[now];
while(then) {
int tox=to[then];
ru[tox]--;
if(!ru[tox])
Add(tox);
then=next[then];
}
sc[now]=i;
}
for(i=; i<=n; i++) {
cout<<sc[i];
if(i&)
cout<<' ';
else
cout<<endl;
}
return ;
}
[Sdwc] 线段的更多相关文章
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
随机推荐
- PAT题目AC汇总(待补全)
题目AC汇总 甲级AC PAT A1001 A+B Format (20 分) PAT A1002 A+B for Polynomials(25) PAT A1005 Spell It Right ( ...
- layui upload 在JS动态加载内容后, 点击按钮无反应
/** * 根据用户选择的不同规格选项 * 返回 不同的输入框选项 */ function ajaxGetSpecInput2(spec_arr) { var goods_id = $('#goods ...
- Educational Codeforces Round 71 (Rated for Div. 2) Solution
A. There Are Two Types Of Burgers 题意: 给一些面包,鸡肉,牛肉,你可以做成鸡肉汉堡或者牛肉汉堡并卖掉 一个鸡肉汉堡需要两个面包和一个鸡肉,牛肉汉堡需要两个面包和一个 ...
- luogu4677山区建小学题解--区间DP
题目链接 https://www.luogu.org/problemnew/show/P4677 分析 这道题方法跟之前题不一样,我们相当于枚举一个左右端点来线性扩展,同时划分断点进行决策 \(f[i ...
- 2018 年 IoT 那些事儿
本文作者:murphyzhang.xmy.fen @腾讯安全云鼎实验室 2018年,是 IoT 高速发展的一年,从空调到电灯,从打印机到智能电视,从路由器到监控摄像头统统都开始上网.随着5G网络的 ...
- Jerry眼中的SAP客户数据模型
本文Jerry将介绍八款SAP产品中的客户模型.希望您在阅读完本文之后,能对SAP客户模型设计的思路有一个最最粗浅的了解. 由于Jerry水平和精力所限,本文不会详细阐述这些产品里的客户模型设计细节, ...
- Java BIO、NIO、AIO 基础,应用场景
Java对BIO.NIO.AIO的支持: Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必 ...
- Nexus Repository Manager OSS 2 配置阿里云私服做代理的坑
安装 搭建 Nexus 私服很简单,官网下载,解压: 使用管理员权限打开cmd: > cd nexus---bundle\nexus--\bin > nexus.bat install # ...
- Codeforces 1148 E - Earth Wind and Fire
E - Earth Wind and Fire 思路: 栈模拟 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC opti ...
- 《黑白团团》第九次团队作业:Beta冲刺与验收准备
项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目 填写团队名称 黑白团团队 填写具体目标 认真负责,完成项目 GitHub链接 Scrum meeting导航 [Beta]Scrum m ...