Seg

【问题描述】
数轴上有n条线段,第i条线段的左端点是a[i],右端点是b[i]。
Bob发现1~2n共2n个整数点,每个点都是某条线段的端点。
这些线段有如下两类特点:
1 x y,表示第x条线段和第y条线段相交(相交在这里指至少有一个公共点)
2 x y,表示第x条线段在第y条线段的左边,且它们不相交。
共有m个特点,每个特点都是如上两类之一。
Bob想通过这些特点推理得到每条线段的端点。
【输入格式】
第一行两个正整数n,m
接下来m行,每行三个正整数,描述线段的特点,格式见题目描述
【输出格式】
输出n行,第i行两个正整数,用空格隔开,分别是a[i]和b[i]
可能有多种答案,输出字典序最小的答案。即先要求a[1]最小,若仍有多解再要求b[1]最小,若仍有多解再要求a[2]最小,若仍有多解再要求b[2]最小,若仍有多解再要求a[3]最小……
如果无解输出“Wrong”(不输出引号)。
【样例输入】
3 2
1 2 3
2 1 3
【样例输出】
1 2
3 5
4 6
【数据规模和约定】
对于30%的数据, 1<=n,m<=10
对于60%的数据, 1<=n,m<=1000
对于100%的数据,1<=n,m<=100000

题解在注释里有,要注意的就是一点,我们如果要求一个字典序最小的拓扑排序,正确的做法并不是尽量把小的塞到前面,

而是把大的尽量塞到后面。

这个要理解的话,就是如果我们尽量把小的噻前面,有可能一个优先级很高的是一个优先级很低的后继,这时候因为优先队列是优先出小的

所以那个优先级很高的会很晚出来。

而我们如果反着跑的话,是不会出现这种情况的,因为优先级低的会被挤到后面去。

/*
可以把每条线段的左右端点都看成一个变量。
设第i条线段的左右端点的变量为l[i],r[i]。 条件1 => l[x]<r[y] && l[y]<r[x]
条件2 => r[x]<l[y] 所以我们把大小关系拓扑建图一下,然后跑一个
优先编号小的线段端点,优先同一线段的左端点的
拓扑排序,这个用一下优先队列就行了。
*/
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define maxn 200005
using namespace std;
int ans[maxn],cnt=0,now,las;
int n,id[maxn],m,opt,X,Y;
priority_queue<int> q;
vector<int> g[maxn]; inline void topsort(){
for(int i=1;i<=now;i++) if(!id[i]) q.push(i);
int x,to;
while(!q.empty()){
x=q.top(),q.pop();
ans[x]=now--;
for(int i=g[x].size()-1;i>=0;i--){
to=g[x][i];
if(!(--id[to])) q.push(to);
}
}
} int main(){
freopen("seg.in","r",stdin);
freopen("seg.out","w",stdout);
scanf("%d%d",&n,&m);
now=n<<1; for(int i=1;i<=n;i++){
g[i*2].pb(i*2-1);
id[i*2-1]++;
} for(int i=1;i<=m;i++){
scanf("%d%d%d",&opt,&X,&Y);
if(opt==1){
g[Y*2].pb(X*2-1),id[X*2-1]++;
g[X*2].pb(Y*2-1),id[Y*2-1]++;
}
else{
g[Y*2-1].pb(X*2);
id[X*2]++;
}
} topsort(); if(now) puts("Wrong");
else for(int i=1;i<=n;i++){
printf("%d %d\n",ans[i*2-1],ans[i*2]);
} return 0;
}

  

某考试 T2 Seg的更多相关文章

  1. 9.13 考试 T2 区间

    删区间 题意: 给出一个长度为

  2. 某考试T2 frog

    题目背景 无 题目描述 数轴上有 n 只青蛙,分别编号为 1 到 n.青蛙 i 的初始位置的坐标为 xi. 它们准备进行如下形式的移动:每轮包括 m 次跳跃,第 i 次跳跃由青蛙 ai(1 < ...

  3. 某考试 T2 Tree

    2 树 2.1 题目描述 给一棵n 个节点的树,节点分别编号为0 到n - 1.你可以通过如下的操作来修改这棵树:首先先删去树上的一条边,此时树会分裂为两个连通块,然后在两个连通块之间加上一条新的边使 ...

  4. 某考试 T2 yja

    2.1 Description 在平面上找 n 个点, 要求这 n 个点离原点的距离分别为 r1, r2, ..., rn. 最大化这 n 个点构成的凸包面积, 凸包上的点的顺序任意. 2.2 Inp ...

  5. 题解 2020.10.24 考试 T2 选数

    题目传送门 题目大意 见题面. 思路 本来以为zcx.pxj变强了,后来发现是SPJ出问题了...考试的时候感觉有点人均啊...结果自己还是只想出来一半. 我们假设 \(f(x)=(\lfloor\f ...

  6. 2019.3.7考试T2 离线数论??

    $ \color{#0066ff}{ 题目描述 }$ 一天,olinr 在 luogu.org 刷题,一点提交,等了一分钟之后,又蛙又替. olinr 发动了他的绝招,说:"为啥啊???&q ...

  7. 某考试 T2 orzcyr

    非常nice的一道行列式的题目. 考虑如果没有路径不相交这个限制的话,那么这个题就是一个行列式:设 a[i][j] 为从编号第i小的源点到编号第j小的汇点的路径条数,那么矩阵a[][]的行列式就是的答 ...

  8. 2019.2.26考试T2 矩阵快速幂加速DP

    \(\color{#0066ff}{题解 }\) 可以发现, 数据范围中的n特别小,容易想到状压 可以想到类似于状压DP的思路,按列进行转移 那么应该有3维,\(f[i][j][k]\)代表到第i列, ...

  9. 2019.2.10考试T2, 多项式求exp+生成函数

    \(\color{#0066ff}{ 题目描述 }\) 为了减小文件大小,这里不写一堆题目背景了. 请写一个程序,输入一个数字N,输出N个点的森林的数量.点有标号. 森林是一种无向图,要求图中不能存在 ...

随机推荐

  1. input框中的必填项之取消当前input框为必填项

    html5新增了一个required属性,可以使用这个属性对文本框设置必填项,直接在input文本框上添加required即可 . 效果如图:   

  2. 排查和处理一台被攻击的linux系统及其事后分析

    11:40 2018/3/16 发现最近几天服务器流量异常的大,检查了系统命令发现命令最近的修改时间很近,检查dns配置也发现了异常的dns服务器地址. 考虑到事态的严重性,铲掉这个系统重新搭建. 事 ...

  3. 倍增 - 强制在线的LCA

    LCA 描述 给一棵有根树,以及一些询问,每次询问树上的 2 个节点 A.B,求它们的最近公共祖先. !强制在线! 输入 第一行一个整数 N. 接下来 N 个数,第 i 个数 F i 表示 i 的父亲 ...

  4. Intellij IDEA快捷键大全

    Intellij IDEA快捷键大全 Intellij IDEA这个工具有些方面确实比较优秀,使用了一段时间的IntelliJ IDEA,感觉这个JAVA IDE非常好用!比如javascript自动 ...

  5. 1、IOS学习计划

    2015年12月10日 -- 2015年12月27日(一共3个周末,12个个工作日) 1.斯坦福公开课(IOS7应用开发) 一共18节课程,通过视频和demo建立感觉 2.千峰的OC课程 一共25节课 ...

  6. 查看2个Python字典的相同以及不同之处

    a = { "x":1, "y":2, "z":3 } b = { "x":1, "w":11, & ...

  7. [oldboy-django][2深入django]学生管理(Form)--查看(分页)

    1 需求: 查看所有学生的信息,(分页功能) 2 前端:bootstrap美化前端 <!DOCTYPE html> <html lang="en"> < ...

  8. [oldboy-django][2深入django]班级管理(Form)--编辑

    1.需求:编辑班级,难点:点击编辑按钮后,页面如何显示 待编辑 班级的信息(用Form实现), 以及Url 设置 2 url url(r'^edit_class/nid=(?P<nid>\ ...

  9. SGX技术初探

    一.SGX技术背景 1.1 SGX技术定义 SGX全称Intel Software Guard Extensions,顾名思义,其是对因特尔体系(IA)的一个扩展,用于增强软件的安全性.这种方式并不是 ...

  10. linux配置Hadoop伪分布安装模式

    1)关闭禁用防火墙: /etc/init.d/iptables status 会得到一系列信息,说明防火墙开着. /etc/rc.d/init.d/iptables stop 关闭防火墙 2)禁用SE ...