B - Reversible Cards(树与图的基础)

简介: B - Reversible Cards(树与图的基础)

题目

题意

  • 输入 n(≤2e5) 和一个 n 行 2 列的矩阵,矩阵元素范围 [1,4e5]
  • 从每行中恰好选一个数,最多能选出多少个不同的数

思路

  • 从图的方向去思考
  • 建图,发现环上的点所有都可以取到
  • 分支上的点,可以通过在拓扑排序的时候,计算出边得数量(即环外点的数量),这些点也是可以取到的
  • 但是,如果一个连通块是无环的(是一棵树),那么这颗树的顶点不被取到
  • 于是做法分两步
  • 拓扑找环,同时把度数不为0的点插入(恰好把一棵树的顶点忽略)答案集合
  • 环上所有点(度数大于1),插入答案集合

代码

ini

复制代码

const int N = 2e5+10,M = 2*N;
vector<int> edge[M];
int d[M];
void solve() 
{
    int n;cin >> n;
    for(int i = 0;i < n;i ++)
    {
        int a,b;cin >> a >> b;
        edge[a].push_back(b);
        edge[b].push_back(a);
        d[a] ++;
        d[b] ++;
    }
    set<int> ans ;
    queue<int> q;
    for(int i = 1;i <= 400000;i ++)if(d[i] == 1)q.push(i);
    while(q.size())
    {
        int u = q.front();q.pop();
        for(auto v:edge[u])
        {
            d[v] --;
            if(d[v] == 1)q.push(v);
            if(d[u] > 0)ans.insert(u);
        }
    }
    for(int i = 1;i <= 400000;i ++)if(d[i] > 1)ans.insert(i);
    cout << ans.size() << endl;
}


相关文章
|
6月前
|
存储 算法
树(Tree) - 概念与基础
树(Tree) - 概念与基础
109 2
|
机器学习/深度学习
POJ 1195 Mobile phones (二维树状树组)
题意:这道题目只是题意自己就去理解了半天,大概题意如下:给出i一个n*n的矩阵,初始化为均为0,还有关于这个矩阵的几种操作,操作如下:命令1:(X Y A)对位于坐标(X Y)的值加A;命令2:(L B R T)求出位于L<=x<=R,B<=y<=T的值的和;命令3:退出不做任何操作。
57 0
|
6月前
|
C++ 容器
【C++】map&set的底层结构 -- AVL树(高度平衡二叉搜索树)(上)
【C++】map&set的底层结构 -- AVL树(高度平衡二叉搜索树)(上)
|
6月前
|
算法 测试技术 C++
【C++】map&set的底层结构 -- AVL树(高度平衡二叉搜索树)(下)
【C++】map&set的底层结构 -- AVL树(高度平衡二叉搜索树)(下)
|
5月前
|
存储 算法 测试技术
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)
78 1
|
6月前
|
存储 算法 C++
c++算法学习笔记 (8) 树与图部分
c++算法学习笔记 (8) 树与图部分
|
5月前
|
存储
数据结构学习记录——如何建立图(邻接矩阵、邻接表-图节点的结构、创建并初始化、插入变、完整图的建立)
数据结构学习记录——如何建立图(邻接矩阵、邻接表-图节点的结构、创建并初始化、插入变、完整图的建立)
72 0
|
存储 算法 索引
【霍罗维兹数据结构】GRAPH 图 | 基本图运算 DFS&BFS | 最小代价生成树
【霍罗维兹数据结构】GRAPH 图 | 基本图运算 DFS&BFS | 最小代价生成树
108 0
CATIA二次开发—遍历结构树
CATIA二次开发—遍历结构树
CATIA二次开发—遍历结构树
|
存储 算法 索引
树概述
树的类型不少,此篇简要对树进行描述,脑中有个整体概念,细节分篇再研究
119 0
树概述