CF2112D Reachability and Tree

题意

设 \(u\) 和 \(v\) 是有向图中的两个不同顶点。如果存在一条从顶点 \(u\) 到顶点 \(v\) 的路径,我们称有序对 \((u, v)\) 是好的。

给一棵树定向,使得好点对数量刚好为 \(n\)。如果可能,输出任意一种满足条件的边定向方案。

题解

注意到不管如何定向一条边总会产生 \(1\) 的贡献,那么答案至少为 \(n-1\)。

如图,我们只需要沿着 \(\text{DFS}\) 给边一正一反的定向就可以产生 \(n-1\) 的贡献。

现在要做的是如何多产生 \(1\) 的贡献,注意到如果一个点的度数为 \(2\) 时,改变其子树上所有边的方向,就可以刚好增加 \(1\) 的贡献。

如图,只要把以顶点 \(4\) 为根节点的子树上的边的方向全部取反即可。

具体的,先找出一个入度为 \(2\) 的点,标记一下,当遍历到该点时将当前方向取反,再正常 \(\text{DFS}\) 即可。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,id;
vector<int> e[N];
vector<pair<int,int>> ans;
void dfs(int u,int fa,bool op){
if(u==id) op^=1;
for(int v:e[u]){
if(v==fa) continue;
if(op) ans.emplace_back(u,v);
else ans.emplace_back(v,u);
dfs(v,u,op^1);
}
}
void solve(){
cin>>n;
for(int i=1;i<=n;i++) e[i].clear();
ans.clear();
for(int i=1;i<=n-1;i++){
int u,v;
cin>>u>>v;
e[u].emplace_back(v);
e[v].emplace_back(u);
}
bool flag=false;
for(int i=1;i<=n;i++)
if(e[i].size()==2){
flag=true;
id=i; //标记入度为 2 的点。
break;
}
if(!flag) return cout<<"NO\n",void();
if(id==1) dfs(2,2,1);//注意不能从标记的点开始 DFS ,否则方向取反就没用了。
else dfs(1,1,1);
cout<<"YES\n";
for(auto it:ans) cout<<it.first<<" "<<it.second<<"\n";
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T; cin>>T;
while(T--) solve();
return 0;
}

CF2112D Reachability and Tree的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  3. iOS网络4——Reachability检测网络状态

    一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...

  4. 无限分级和tree结构数据增删改【提供Demo下载】

    无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...

  5. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  6. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  7. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

  8. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  9. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  10. Leetcode 笔记 101 - Symmetric Tree

    题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...

随机推荐

  1. 一、trackingjs初体验-颜色捕获 vue3

    前言 Tracking.js 是一个独立的JavaScript库(不依赖于任何框架),用于跟踪从相机实时收到的数据. 跟踪的数据既可以是颜色,也可以是人, 也就是说我们可以通过检测到某特定颜色,或者检 ...

  2. ETL结合飞书快速实现业务信息同步

    一.ETL工具介绍 ETLCloud数据集成平台是一款针对IT以及数据工程师推出的全域数据集成平台产品.它是集实时数据集成和离线数据集成以及API发布为一体的数据集成平台.与其他开源数据集成工具相比, ...

  3. tf.keras.layers.Attention: Dot-product attention layer, a.k.a. Luong-style attention.

    tf.keras.layers.Attention( View source on GitHub ) Dot-product attention layer, a.k.a. Luong-style a ...

  4. 雨林木风Win10专业版解除文件夹权限的问题

    有雨林木风系统的小伙伴,在win10专业版中打开一些文件夹,却出现了没有权限的问题,那要如何解除Win10文件夹的权限呢?本文中,雨林木风小编就来分享具体的解除方法,感兴趣的朋友可以一起来看看. 在  ...

  5. 强大的AI在线绘画

    能画一切,自带各种模型 https://tensor.art/

  6. go学习笔记:s4 = append(s4[:2], append([]int{3}, s4[2:]...)...),append后面三个点是什么意思?

    在 Go 语言中,append 后面的三个点 ... 是展开操作符(spread operator) 基本概念 ... 用于将切片展开为独立的元素,传递给函数或 append 函数. 代码: s4 = ...

  7. JBOSS应用中间件

    首先:JBOSS是EJB的服务器,就像TOMCAT是JSP的服务器一样 软件名称JBoss 开发商Redhat 软件语言java 支持标准EJB 1.1.EJB 2.0.EJB3.0 JBOSS是一个 ...

  8. Feko模型文件在超算节点测试以验证节点软件Feko的licence是否有效

    问题:超算节点上安装的Feko软件不是正版软件,需要破解,有时候license过期,会导致节点软件用不了,这样的话,作业在这个节点上运行会出现错误,需要重新破解,然后验证破解成功与否 解决:: 1在l ...

  9. Java中this()与super()的区别解析

    this() 的用法 功能:调用当前类的其他构造函数 作用:避免构造函数中的代码重复 限制:必须是构造函数的第一条语句 适用场景:当类中存在多个构造函数且需要共享部分初始化逻辑时 class Car ...

  10. 列表及Map

    一. 列表 1, 数组 : 一组相同数据类型,固定大小的数据 固定大小: 一旦定义,不能再动态添加,删除 String[] hobby = {"篮球","跳舞" ...