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\n1\n");
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\n");
27         for(int i=1;i<=n;i++){
28             if(deg[i]==1)ans++;
29         }
30         printf("%d\n",ans-1);
31         for(int i=1;i<=n;i++){
32             if(deg[i]==1)printf("%d %d\n",tmp,i);
33         }
34         return 0;
35     }
36     else {
37         printf("No\n");
38         return 0;
39     }
40     return 0;
41 } 
View Code

 

转载于:https://www.cnblogs.com/Xu-daxia/p/9380681.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值