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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM