题目传送门


分析

可以发现题目实际上求的是最小强连通分量个数。

并且每个强连通分量必然是由最多两段区间 \(a_l\sim a_r,b_L\sim b_R\) 组成的

只要存在一条路 \(b_R->a_l,a_r->b_L\) 那么这个区间就能连在一起。

将所有的边按 \(a\) 先升序,再 \(b\) 降序的顺序排序,然后按顺序枚举,观察到当前边也许会和后面的边有交。

如果当前边不是 \(b_i\) 连向 \(a_i\) 一定不优,反转之后把有交的边删掉,可以维护 \(b\) 的最大值,如果 \(b\) 不超过最大值就证明有交。

然后定向之后跑一遍Tarjan就可以了。


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
const int N=400011;
struct node{int y,next;}e[N<<1]; struct rec{int x,y,rk;}a[N];
int dfn[N],low[N],as[N],n,m,k,et,tot,v[N],st[N],Top,scc; bool ans[N];
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
int min(int a,int b){return a<b?a:b;}
bool cmp(rec x,rec y){return x.x<y.x||(x.x==y.x&&x.y>y.y);}
void add(int x,int y){e[++et]=(node){y,as[x]},as[x]=et;}
void tarjan(int x){
dfn[x]=low[x]=++tot,v[x]=1,st[++Top]=x;
for (int i=as[x];i;i=e[i].next)
if (!dfn[e[i].y]){
tarjan(e[i].y);
low[x]=min(low[x],low[e[i].y]);
}else if (v[e[i].y]) low[x]=min(low[x],dfn[e[i].y]);
if (dfn[x]==low[x]){
int y; ++scc;
do{
y=st[Top--],v[y]=0;
}while (y!=x);
}
}
int main(){
n=iut(),m=iut(),k=iut();
for (int i=1;i<n;++i) add(i,i+1);
for (int i=1;i<m;++i) add(i+n,i+1+n);
for (int i=1;i<=k;++i) a[i]=(rec){iut(),iut(),i};
sort(a+1,a+1+k,cmp);
for (int i=1,mx=0;i<=k;++i)
if (mx<a[i].y) add(a[i].y+n,a[i].x),mx=a[i].y,ans[a[i].rk]=1;
else add(a[i].x,a[i].y+n);
for (int i=1;i<=n+m;++i) if (!dfn[i]) tarjan(i);
printf("%d",scc);
for (int i=1;i<=k;++i) putchar(i==1?10:32),putchar(ans[i]+48);
return 0;
}

#Tarjan,贪心#LOJ 3684 「COCI 2022.3」Usmjeravanje的更多相关文章

  1. [LOJ#515]「LibreOJ β Round #2」贪心只能过样例

    [LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...

  2. Loj #2324. 「清华集训 2017」小 Y 和二叉树

    Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...

  3. [LOJ#2328]「清华集训 2017」避难所

    [LOJ#2328]「清华集训 2017」避难所 试题描述 "B君啊,你当年的伙伴都不在北京了,为什么你还在北京呢?" "大概是因为出了一些事故吧,否则这道题就不叫避难所 ...

  4. Loj #2331. 「清华集训 2017」某位歌姬的故事

    Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...

  5. Loj #2321. 「清华集训 2017」无限之环

    Loj #2321. 「清华集训 2017」无限之环 曾经有一款流行的游戏,叫做 *Infinity Loop***,先来简单的介绍一下这个游戏: 游戏在一个 \(n \times m\) 的网格状棋 ...

  6. Loj 2320.「清华集训 2017」生成树计数

    Loj 2320.「清华集训 2017」生成树计数 题目描述 在一个 \(s\) 个点的图中,存在 \(s-n\) 条边,使图中形成了 \(n\) 个连通块,第 \(i\) 个连通块中有 \(a_i\ ...

  7. 【刷题】LOJ 6227 「网络流 24 题」最长k可重线段集问题

    题目描述 给定平面 \(\text{xoy}\) 上 \(n\) 个开线段组成的集合 \(\text{I}\) ,和一个正整数 \(k\) ,试设计一个算法. 从开线段集合 \(\text{I}\) ...

  8. LOJ#2351. 「JOI 2018 Final」毒蛇越狱

    LOJ#2351. 「JOI 2018 Final」毒蛇越狱 https://loj.ac/problem/2351 分析: 首先有\(2^{|?|}\)的暴力非常好做. 观察到\(min(|1|,| ...

  9. [LOJ#2330]「清华集训 2017」榕树之心

    [LOJ#2330]「清华集训 2017」榕树之心 试题描述 深秋.冷风吹散了最后一丝夏日的暑气,也吹落了榕树脚下灌木丛的叶子.相识数年的Evan和Lyra再次回到了小时候见面的茂盛榕树之下.小溪依旧 ...

  10. [LOJ#2329]「清华集训 2017」我的生命已如风中残烛

    [LOJ#2329]「清华集训 2017」我的生命已如风中残烛 试题描述 九条可怜是一个贪玩的女孩子. 这天她在一堵墙钉了 \(n\) 个钉子,第 \(i\) 个钉子的坐标是 \((x_i,y_i)\ ...

随机推荐

  1. 关于dpi awareness 的清单文件设置

    要设置dpi 意识,一般是使用SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE)来设置 具体可参考:Setting the default DP ...

  2. RK3588开发笔记(一):基于方案商提供的宿主机交叉编译Qt5.12.10

    前言   rk3588开发车机,方案上提供的宿主机只是编译rk sdk的版本,并未编译好Qt,那么需要自行交叉编译Qt系统.选择的Qt的版本为5.12.10.   宿主机准备   下载并打开宿主机,只 ...

  3. Qt三方库开发技术:QXlsx介绍、编译和使用

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  4. 程序员应具备的PS基本技能(三):程序员使用PSD源文件切图

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  5. 解决pip install时出现的Could not fetch URL https://pypi.org/simple/pip/问题

    打开windows的我的电脑,在最上方目录栏输入%APPDATA%,回车,接着会定位到一个新的目录, 目录路径为C:\Users\Administrator\AppData\Roaming,在这个目录 ...

  6. py.path模块

    # https://py.readthedocs.io/en/latest/path.html import os dir_path = "/home/lw/" os.path.j ...

  7. ABP模块的测试项目从默认的Microsoft SQL Server替换成MySQL

    1.替换项目引用 2.重新生成解决方案 3.删除Migrations 4.模块的引用 替换成:AbpEntityFrameworkCoreMySQLModule 5.命名空间 替换成:Volo.Abp ...

  8. [Azure Developer]把Azure Function中ILogger对象静态化为静态方法提供日志记录

    问题描述 在Azure Function代码中,有默认的ILogger对象来记录函数的日志,如果函数引用了一些静态对象,是否有办法使用这个默认的ILogger对象来记录日志呢? using Syste ...

  9. 摆脱鼠标系列 Trigger Suggest 快捷键 改成 Shift + Space

    摆脱鼠标系列 Trigger Suggest 快捷键 改成 Shift + Space 看marp插件的时候,发现用ctrl + space 自动提示,但是我这里是输入法

  10. Vue.prototype.$app = this vscode ctrl 点击 不跳转

    Vue.prototype.$app = this vscode ctrl 点击 不跳转 解决思路 src/types/vue.d.ts 里面写,具体还没解决,找到一篇 在js里面的 我这种直接将当前 ...