Catowice City【Codeforces 1248 F】【Tarjan】

2023-10-30

Codeforces Round #594 (Div. 2) F


  这道题的解法还真是不少,写了个枚举也可以做这道题,当然Tarjan自然也是可以的。

  我一开始没捋清楚思路,再想想,发现,我们看到审判者,他们都会指向一些参赛选手,那么我们是不是可以尽力去找那些没有指向的人,也就是出度为0的点,那么他们岂不是就没有指向了。然后我们可以把有关系的缩点,然后再DAG上找到一个审判就可以了,剩下的都是参赛者了。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define eps 1e-9
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define MP(a, b) make_pair(a, b)
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 1e6 + 7;
int N, M, head[maxN], cnt;
struct Eddge
{
    int nex, to;
    Eddge(int a=-1, int b=0):nex(a), to(b) {}
}edge[maxN];
inline void addEddge(int u, int v)
{
    edge[cnt] = Eddge(head[u], v);
    head[u] = cnt++;
}
int dfn[maxN], low[maxN], tot, Stop, Stap[maxN], Belong[maxN], Bcnt, du[maxN], siz[maxN];
bool instack[maxN];
void Tarjan(int u)
{
    dfn[u] = low[u] = ++tot;
    Stap[++Stop] = u;
    instack[u] = true;
    for(int i=head[u], v; ~i; i=edge[i].nex)
    {
        v = edge[i].to;
        if(!dfn[v])
        {
            Tarjan(v);
            low[u] = min(low[u], low[v]);
        }
        else if(instack[v]) low[u] = min(low[u], dfn[v]);
    }
    int v;
    if(low[u] == dfn[u])
    {
        Bcnt++; siz[Bcnt] = 0;
        do
        {
            v = Stap[Stop--];
            instack[v] = false;
            Belong[v] = Bcnt;
            siz[Bcnt]++;
        } while(u != v);
    }
}
inline void init()
{
    cnt = tot = Stop = Bcnt = 0;
    for(int i=1; i<=N; i++)
    {
        head[i] = -1;
        du[i] = dfn[i] = 0;
        instack[i] = false;
    }
}
int main()
{
    int T; scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d", &N, &M);
        init();
        for(int i=1, u, v; i<=M; i++)
        {
            scanf("%d%d", &u, &v);
            if(u == v) continue;
            addEddge(u, v);
        }
        for(int i=1; i<=N; i++) if(!dfn[i]) Tarjan(i);
        if(Bcnt == 1) { printf("No\n"); continue; }
        for(int u=1; u<=N; u++)
        {
            for(int i=head[u], v; ~i; i=edge[i].nex)
            {
                v = edge[i].to;
                if(Belong[u] == Belong[v]) continue;
                du[Belong[u]]++;
            }
        }
        int id;
        for(id = 1; id <= Bcnt; id++) if(!du[id]) break;
        printf("Yes\n");
        printf("%d %d\n", siz[id], N - siz[id]);
        for(int i=1; i<=N; i++) if(Belong[i] == id) printf("%d ", i); puts("");
        for(int i=1; i<=N; i++) if(Belong[i] ^ id) printf("%d ", i); puts("");
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Catowice City【Codeforces 1248 F】【Tarjan】 的相关文章

  • Codeforces Round 739 (Div. 3)

    A Dislike of Threes AC代码 include
  • Supermarket 【POJ - 1456】【并查集+哈希表思想+贪心】

    题目链接 原来 并查集还有这样的作用 题记 我想用个哈希表的思维来解这道题 但是 显然O N 2 的哈希表去查询并插入显然是不行的 那么既然挂在图论专题 我就得用相应的方式解答咯 要是不挂在图论专题 我可能会自闭了 我们对于每个物品按照价值
  • 无向图的遍历-BFS与DFS

    一 理论部分 无向图的遍历可用深度搜索 DFS 与广度搜索 BFS 深度搜索的基本方式是由图的一个节点1出发然后随机选一个与其相邻的节点2 接着在选择一个与其相邻的节点3 当一条路遍历完后再选择最近一个遍历过的 且相邻节点有未遍历过的节点
  • 图论17(Leetcode864.获取所有钥匙的最短路径)

    用二进制表示获得的钥匙 假设n 钥匙个数 000000000代表没有钥匙 0000000001代表有idx为1的钥匙 0000000011代表有idx 1 2的钥匙 这方法巧妙又复杂 代码 class Solution static int
  • 大学生团体天梯赛(第十届)

    题目地址 天梯赛 include
  • 学懂最小生成树(克鲁斯卡尔算法)

    本节 小编将带大家了解最小生成树的第二种构成算法 克鲁斯卡尔算法 Kruskal algorithm 当然 对另一种算法感兴趣的朋友可以看看之前的这篇文章 学懂最小生成树 普里姆算法 目录 一 实现原理 二 代码实现 一 实现原理 克鲁斯卡
  • A*算法 解决(有环图)第k短路径长度(C++)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • Python,创建map

    import matplotlib pyplot as mpp import os random math matplotlib version 3 5 1 numpy version 1 21 5 创建画布及坐标轴 def set cav
  • [UVA1364

    评测地址 网址1 网址2 题目描述 题意 给出n位骑士 然后有m个关系 每个关系以格式 a b a b a b给出 表达骑士 a a
  • 迪杰斯特拉算法浅析

    所谓的迪杰斯特拉算法 就是一个用来求一个图中某点到其它点的最短路径的算法 大致方法 遍历所有节点 找到离起点最近的一个点 那么这个点到起点的最小距离肯定是起点到这个点的这条边的权值 然后标记这个点被使用过了 以1中的那个点为中继 更新其它节
  • [NOI 2015复习][BZOJ 1509][NOI 2003]逃学的小孩(树的直径)

    题目链接 http www lydsy com JudgeOnline problem php id 1509 题目大意 要从一棵树中找出三个点 X Y Z X Y Z 使得 min dis A C dis B C dis A B min
  • 数据结构练习题——图(含应用题)

    1 选择题 1 在一个图中 所有顶点的度数之和等于图的边数的 倍 A 1 2 B 1 C 2 D 4 答案 C 2 在一个有向图中 所有顶点的入度之和等于所有顶点的出度之和的 倍 A 1 2 B 1 C 2 D 4 答案 B 解释 有向图所
  • 数据结构——非线性结构(图)

    文章目录 一 非线性结构的概述 二 图的基本概念 1 定义 2 无向图 有向图 2 1 无向图 2 2 有向图 2 3 简单图 2 4 多重图 3 顶点的度 出度 入度 3 1 对于无向图 3 2 对于有向图 4 边的权 带权图 网 5 点
  • How far away ? 【HDU - 2586】【DFS+链式前向星优化】

    题目链接 其实这道题可以不用链式前向星优化换做vector lt gt 也是可以跑的 只是会许会慢些而已 来换个中文题意好读些 勇气小镇是一个有着n个房屋的小镇 为什么把它叫做勇气小镇呢 这个故事就要从勇气小镇成立的那天说起了 修建小镇的时
  • Dinic算法学至大佬,学以致用【挂上相应的题目】

    这个巨佬讲的超级厉害 学起来很快 还有优化的说呢 Dinic算法 研究总结 网络流 网络流是信息学竞赛中的常见类型 笔者刚学习了最大流Dinic算法 简单记录一下 网络流基本概念 什么是网络流 在一个有向图上选择一个源点 一个汇点 每一条边
  • gym 101512 BAPC 2014 I Interesting Integers

    Problem codeforces com gym 101512 attachments vjudge net contest 186506 problem I Meaning 给出一个 正整数 n 要找尽量小的 a 和 b a lt b
  • 图 - Java实现无向带权图的邻接矩阵表示法

    图 Java实现无向带权图的邻接矩阵表示法 1 图 1 1 图的介绍 图 Graph 是一种复杂的非线性表结构 图中的元素我们就叫做顶点 vertex 图中的一个顶点可以与任意其他顶点建立连接关系 我们把这种建立的关系叫做边 edge 跟顶
  • 有向图的拓扑排序

    给定一个 nn 个点 mm 条边的有向图 点的编号是 11 到 nn 图中可能存在重边和自环 请输出任意一个该有向图的拓扑序列 如果拓扑序列不存在 则输出 1 1 若一个由图中所有点构成的序列 AA 满足 对于图中的每条边 x y x y
  • 数模培训第二周——图论模型

    图论中最短路算法与程序实现 图论中的最短路问题 包括无向图和有向图 是一个基本且常见的问题 主要的算法有Dijkstra算法和Floyd算法 Floyd算法 简介 Floyd Warshall算法 英语 Floyd Warshall alg
  • 860.染色法判定二分图

    二分图是指一个图中的所有顶点可以分为两部分 并且每条边连接的是属于不同部分的两个顶点 include

随机推荐

  • OpenGL系列教程之十二:OpenGL Windows图形界面应用程序

    这篇文章是关于使用MVC Model View Controller 模型 视图 控制 框架在windows平台下创建OpenGL图形界面应用程序 MVC框架在GUI Graphic User Interface 图形用户界面 应用程序中被
  • Docker之数据卷与Dockerfile

    一 docker基本运行 将容器后台运行并进入容器 docker run itd name 名字 centos 强制删除所有容器 docker rm f docker ps a 二 数据卷 目录挂载 docker在容器中管理数据主要有两种方
  • 【计算机网络】Linux环境中的TCP网络编程

    文章目录 前言 一 TCP Socket API 1 socket 2 bind 3 listen 4 accept 5 connect 二 封装TCPSocket 三 服务端的实现 1 封装TCP通用服务器 2 封装任务对象 3 实现转换
  • python高阶函数用法之map reduce

    map 函数 接收两个参数 一个是函数 一个是Iterable map将传入的函数依次作用到序列的每个元素 并把结果作为新的Iterator返回 gt gt gt def f x return x x gt gt gt r map f 1
  • 一直没懂PCB叠层设计,直到看见这篇文章......

    总的来说叠层设计主要要遵从两个规矩 每个走线层都必须有一个邻近的参考层 电源或地层 邻近的主电源层和地层要保持最小间距 以提供较大的耦合电容 下面列出从两层板到八层板的叠层来进行示例讲解 一 单面PCB板和双面PCB板的叠层 对于两层板来说
  • Python-文件操作

    Python文件操作 1 打开文件 使用open 函数打开文件 指定文件名和模式 常用模式有 r 读取 默认 w 写入 会先截断文件 a 追加 b 二进制模式 t 文本模式 默认 updating reading and writing f
  • titanic数据集_数据挖掘项目——泰坦尼克号生还预测

    数据集来源于kaggle经典竞赛数据集 一 目的 根据数据集中的信息 利用python机器学习对泰坦尼克乘客是否生还进行预测 二 数据集 我的数据集有三个 test train genderclassmodel 都是csv格式 test和t
  • stm32f4有重映射么_STM32 端口复用&重映射(USART Remap)

    下面跟大家说一下STM32单片机的端口重映射 因为是以自己为实例 这里是以USART1的重映射为例 因为我要一个TFT LCD屏的主控板 考虑到FSMC 我选用了STM32F103VCT6 型号的CPU 一不小心串口接到USART1上了 因
  • networkx画图(番外)——(1)自定义节点布局

    networkx画图 番外 1 自定义节点布局 networkx虽然非常方便 但在一些超大规模的图数据上 依然显得吃力 所以大多数时候 它仅仅是被用来做一些实例性的分析和可视化展示的 这需要学会如何灵活的画图 最重要的就是布局 即每个节点在
  • word中导入zotero的参考文献

    平时使用Zotero管理文献 使用Word写完论文后想用Zotero导入参考文献 也方便修改参考文献格式 Zotero 打开Zotero找到编辑 首选项 打开首选项 下载国标格式 引用 获取更多样式 搜索框 China Word Word中
  • 技术学习的思考

    学习新的技术 先了解这项技术有什么用 可以解决哪些技术难点 落地这项技术的场景 以及和其他技术的对比 和提出自己大概了解这项技术后存在的疑问 o 例如核间通讯IPC与芯片间通讯ICC有什么区别 对要学的技术梳理出一个框架 根据这个框架先找到
  • 数仓建模—宽表的设计

    宽表的设计 高内聚低耦合 宽表是数仓里面非常重要的一块 数仓是分层的 这是技术进步和时代变化相结合的产物 数仓的分层式为了更好地管理数仓以及更加高效地进行数据开发 宽表主要出现在dwd 层和报表层 当然有的人说dws 层也有 宽表 从字面意
  • springmvc文件上传 并读取excel文件基本写法 多文件时参数为 @RequestParam MultipartFile[] myfiles 单文件时直接传File...

    说明 上传multipartFile时 无法直接转为File去读取excel文件内容 因为为了安全 不可能知道客户端文件绝对路径 解决方法为在服务器端生成一个File文件 然后再读取这个服务器的文件内容保存到数据库 controller 导
  • 完美解决 ModuleNotFoundError: No module named 'pip'

    我在安装django的一个第三方包时 就是执行下边命令时cmd提示pip版本得更新 确怎么也更新不了pip pip install django grappelli 我进去anaconda 提示anaconda也需要更新 更新完以后 再次进
  • SpringBoot中CommandLineRunner接口起什么作用呢?

    转自 SpringBoot中CommandLineRunner接口起什么作用呢 下文笔者讲述SpringBoot中CommandLineRunner接口的功能简介说明 如下所示 SpringBoot中CommandLineRunner接口的
  • openwrt网络设置

    OpenWrt的网络配置文件是 etc config network 它负责交换芯片VLAN 网络接口和路由的配置 此文件在编辑和保存之后需要执行 etc init d network reload 命令 在变更生效前 停止和重启网络 目的
  • uniapp多端问题总结

    页面跳转相关 1 页面跳转传参报错 问题 小程序报错 SyntaxError Unexpected end of JSON inputat JSON parse 原因 是由于JSON parse无法识别某些url中的特殊字符比如 等特殊符号
  • 卓越性能模式

    卓越性能模式 该模式适用于高端电脑 在常用的win10专业版和家庭版中经常会被隐藏 可通过手动开启 以管理员身份打开Powershell 输入以下代码回车开启 powercfg duplicatescheme e9a42b02 d5df 4
  • replace 如何分别替换第一次匹配和所有匹配之后得到的字符串

    JSAPI中 对于replace 方法的描述是这样的 replace 方法用于在字符串中用一些字符替换另一些字符 或替换一个与正则表达式匹配的子串 在实际应用中 举个例子 把字符串中的 a 替换为 空字符串 var str aaasssbs
  • Catowice City【Codeforces 1248 F】【Tarjan】

    Codeforces Round 594 Div 2 F 这道题的解法还真是不少 写了个枚举也可以做这道题 当然Tarjan自然也是可以的 我一开始没捋清楚思路 再想想 发现 我们看到审判者 他们都会指向一些参赛选手 那么我们是不是可以尽力