当前位置: 首页 > news >正文

cf2112d

CF2112D Reachability and Tree

link

题意

给定一棵 \(n\) 个点的树,求一种为边定向的方案使得树上能两两到达的点恰好有 \(n\) 对。多测。\(\sum n\leq 2\times 10^5\)

题解

先手玩样例,发现只要一正一反定向就会出现 \(n-1\) 对,因为每一条边至少都有 \(1\) 对。继续观察发现一条长度为 \(m\) 的链上答案是 \(m(m-1)\over 2\)。那还需要再多一对,即需要一条长度为 \(2\) 的链。具体做法是原树上度为 \(2\) 的点的子树边的方向全部取反,这样该点和其父亲就会形成链。当然,如果是根就特判一下,把根变成其他的点。复杂度 \(O(n)\)。aclink。

  • 如果 \(1\) 是那个点需要把根变成其他点,因为根没有父亲,也就不能形成链。

代码

#include<bits/stdc++.h>
#define i64 long long
#define L(a,b,c,d) for(int a=b;a<=c;a+=d)
#define R(a,b,c,d) for(int a=b;a>=c;a-=d)using namespace std;
const int N=2e5+5;void solve();
int n,k;
vector<int> a[N];signed main(){int Test=1;scanf("%d",&Test);while(Test--) solve();return 0;
}void dfs(int u,int last,bool f){if(u==k){f=!f;}for(auto v:a[u]){if(v!=last){if(f) printf("%d %d\n",u,v);else printf("%d %d\n",v,u);dfs(v,u,!f);}}
}void solve(){scanf("%d",&n);L(i,1,n,1) a[i].clear();L(i,1,n-1,1){int x,y;scanf("%d%d",&x,&y);a[x].push_back(y);a[y].push_back(x);}k=-1;L(i,1,n,1){if(a[i].size()==2){k=i;break;}}if(k==-1){printf("No\n");return;}printf("Yes\n");if(k==1) dfs(2,-1,1);else dfs(1,-1,1);
}
http://www.sczhlp.com/news/42911/

相关文章:

  • 企业服务质量:SLI,SLO,SLA
  • 【集训队作业2018】count 题解
  • 东莞常平天气预报seo 推广
  • 网站色彩代码如何做网站平台
  • 淮北建站百度图片搜索
  • 想学网站建设开发好口碑关键词优化地址
  • 阿里云备案网站 网站名称怎么写关键词上首页软件
  • API
  • HuggingFace课程-6. Tokenizers库 标准化和预分词
  • 广州网站设计制作报价青岛今天发生的重大新闻
  • 北京市住房城乡建设委门户网站登录seo免费优化软件
  • 网站做一半能退吗帮别人推广app赚钱
  • 河南实力网站建设首选怎样自己制作网站
  • baidu网站建设免费发外链
  • 哪个网站美丽乡村做的比较好谷歌推广真有效果吗
  • 做简历做得好的网站关键词排名查询
  • 毕业设计做 做交易网站做网站的外包公司
  • 个人网站如何做淘宝店怎么运营和推广
  • 微信公众号优惠劵网站怎么做的北京做seo的公司
  • wordpress搭建服务器长春seo整站优化
  • wordpress种子在线播放关键词首页排名优化平台
  • 交友高端网站建设你对网络营销的理解
  • 网站建设技术支持英文推广普通话心得体会
  • 微信订阅号不认证可以做网站吗百度刷排名优化软件
  • 商城网站建设套餐世界杯比分查询
  • 公司网站百度排名没有了免费建网站的平台
  • 做国外房产的网站seo的关键词无需
  • 网站注册搜索引擎的目的是夜狼seo
  • 定位问题2:明明打印是对的,为什么结果不对?
  • 接口设计之道: RPC 与 RESTful 的抉择与融合