CF981C(菊花图的性质)

Posted xu-daxia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF981C(菊花图的性质)相关的知识,希望对你有一定的参考价值。

题目描述

RAMESS知道很多关于树的问题(无循环的无向连通图)! 他创建了一个新的有用的树的划分,但他不知道如何构造它,所以他请求你的帮助! 划分是从树上的边中分裂出一些简单的路径,使得每个两条路径都具有至少一个公共顶点。树的每一个边都应该在一条路径上。 帮助RAMESs,找到这样的树的划分,或判断没有这样的划分。

题解

很明显只有菊花图才有这样的性质,所以只要判断这个图是不是菊花图就行,大体思路是找到度数大于2的点的个数加特判。

技术分享图片
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 const int N=100010;
 8 int n,deg[N],ans,tmp;
 9 int main(){
10     scanf("%d",&n);
11     for(int i=1,u,v;i<=n-1;i++){
12         scanf("%d%d",&u,&v);
13         deg[u]++;
14         deg[v]++;
15         if(deg[u]==3)ans++,tmp=u;
16         if(deg[v]==3)ans++,tmp=v;
17     }
18     if(ans==0){
19         printf("Yes
1
");
20         for(int i=1;i<=n;i++){
21             if(deg[i]==1)printf("%d ",i);
22         }
23         return 0;
24     }
25     else if(ans==1){
26         printf("Yes
");
27         for(int i=1;i<=n;i++){
28             if(deg[i]==1)ans++;
29         }
30         printf("%d
",ans-1);
31         for(int i=1;i<=n;i++){
32             if(deg[i]==1)printf("%d %d
",tmp,i);
33         }
34         return 0;
35     }
36     else {
37         printf("No
");
38         return 0;
39     }
40     return 0;
41 } 
View Code

 

以上是关于CF981C(菊花图的性质)的主要内容,如果未能解决你的问题,请参考以下文章

CF981C Useful Decomposition树/思维

CF891C Envy

CF1039C Network Safety

CF1039C Network Safety

CF891C Envy

SD 一轮集训 day4 圣城鼠