CF2112D Reachability and Tree
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的更多相关文章
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
		
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
 - SAP CRM 树视图(TREE VIEW)
		
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
 - iOS网络4——Reachability检测网络状态
		
一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...
 - 无限分级和tree结构数据增删改【提供Demo下载】
		
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
 - 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
		
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
 - Leetcode 笔记 110 - Balanced Binary Tree
		
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
 - Leetcode 笔记 100 - Same Tree
		
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
 - Leetcode 笔记 99 - Recover Binary Search Tree
		
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
 - Leetcode 笔记 98 - Validate Binary Search Tree
		
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
 - Leetcode 笔记 101 - Symmetric Tree
		
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
 
随机推荐
- CF1182B Plus from Picture 题解
			
CF1182B Plus from Picture 写在前面 为什么在已经有 \(12\) 篇题解后,我还是要写这篇题解? 因为这篇题解提供一个码量较小,且时间复杂度严格 \(O(wh)\) 的做法, ...
 - OverallAuth权限管理系统,超精度权限划分(第一篇:功能级权限)。
			
一.前言 随着信息化系统的普及,信息安全愈发的重要,企业对于信息的保密程度越来越高.程序员面临的压力开始逐步递增. 而作者作为"码农",也深深的体会到这一点. 随着公司业务的发展, ...
 - iPaaS 平台在企业中的定位及集成方式
			
iPaaS 平台在企业中的定位是作为 IT 架构的基础底座能力之一,是构建业务中台的关键组件,同时也为数据中台提供支撑服务.它在企业中承担着连接.集成和管理不同系统.应用程序和数据的重要角色,为企业的 ...
 - 获奖公告|RestCloud应用场景分享征稿大赛
 - flink 1.11.2 学习笔记(5)-处理消息延时/乱序的三种机制
			
在实时数据处理的场景中,数据的到达延时或乱序是经常遇到的问题,比如: * 按时间顺序发生的数据1 -> 2,本来应该是1先发送,1先到达,但是在1发送过程中,因为网络延时之类的原因,导致1反而到 ...
 - 【深度品质】win10 21h1 64位专业版系统 V2021.03
			
[深度品质]win10 21h1 64位专业版系统 V2021.03 文件: w1021h1x64cj.rar大小: 5993449476 字节 5.58GBMD5: C38D6CF3F5226901 ...
 - Redis学习笔记--数据类型和常用命令
			
数据类型和常用命令 简介: Redis全名Remote Dictionary Server(远程字典服务器)是一个高性能的Key-Value数据库提供了主富的数据结构,例如String.Hash. ...
 - MFC好书推荐
			
1. Programming Windows with MFC MFC最好的入门书籍,一个类一个类的拆开然后讲解给你,很容易上手 2. MFC Interals 分析的很深入,学过了第一本后,可以通过 ...
 - Docker问题解决:Error response from daemon: Get https://registry-1.docker.io/v2/yandex/clickhouse-server/manifests/latest: net/http: TLS handshake timeout
			
方法1: vi /etc/docker/daemon.json { "registry-mirrors": ["http://hub-mirror.c.163.com&q ...
 - 深度剖析:HR 人力资源软件排名背后的考量与推荐
			
在数字化浪潮席卷企业管理的当下,HR 人力资源软件已成为企业提升管理效率.优化人才运营的关键工具.市场上软件琳琅满目,各类 "排名" 也层出不穷,但这些排名往往因评判标准不一而让人 ...
 
			
		
