E. Bear and Drawing

來源:互聯網
上載者:User

標籤:

     E. Bear and Drawingtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard output

Limak is a little bear who learns to draw. People usually start with houses, fences and flowers but why would bears do it? Limak lives in the forest and he decides to draw a tree.

Recall that tree is a connected graph consisting of n vertices and n - 1 edges.

Limak chose a tree with n vertices. He has infinite strip of paper with two parallel rows of dots. Little bear wants to assign vertices of a tree to some n distinct dots on a paper so that edges would intersect only at their endpoints — drawn tree must be planar. Below you can see one of correct drawings for the first sample test.

Is it possible for Limak to draw chosen tree?

Input

The first line contains single integer n (1 ≤ n ≤ 105).

Next n - 1 lines contain description of a tree. i-th of them contains two space-separated integers ai and bi(1 ≤ ai, bi ≤ n, ai ≠ bi) denoting an edge between vertices ai and bi. It‘s guaranteed that given description forms a tree.

Output

Print "Yes" (without the quotes) if Limak can draw chosen tree. Otherwise, print "No" (without the quotes).

Sample test(s)input
8
1 2
1 3
1 6
6 4
6 7
6 5
7 8
output
Yes
input
13
1 2
1 3
1 4
2 5
2 6
2 7
3 8
3 9
3 10
4 11
4 12
4 13
output
No

我們想如果一個點 串連著 大於等於兩顆樹是多叉樹的話,那麼我們就可以認為這個是無解的(除非其中一顆樹是直接連接在該結點上的)。
#include<cstdio>#include <iostream>#include <string.h>#include <vector>using namespace std;const int maxn = 100000 + 5;vector<int> G[maxn];int leg[maxn];bool del[maxn];void dfs(int cur, int per=-1){      if(G[cur].size()<=2)        {             del[cur]=true;             int siz=G[cur].size();             for(int i=0; i<siz; i++)                {                     int b=G[cur][i];                     if(b == per) continue;                     dfs(b,cur);                }        }}int main() {    int n;    while(scanf("%d",&n)==1)    {        memset(del,false,sizeof(del));        memset(leg,0,sizeof(leg));         for(int i=1; i<=n; i++)G[i].clear();        for(int i=1; i<n; i++)            {                int a,b;                 scanf("%d%d",&a,&b);                 G[a].push_back(b);                 G[b].push_back(a);            }            for(int i=1; i<=n; i++)            if(G[i].size() ==1 ){                dfs(i);            }            for(int a=1; a<=n; a++)            {                int siz=G[a].size();                for(int j = 0; j<siz; j++)                    {                         int b=G[a][j];                         if(del[b])                            {                                leg[a]=min(leg[a]+1,2);                            }                    }            }            bool falg=true;            for(int a=1; a<=n; a++)                if(del[a]==false){                     int cnt=0;                     for(int j=0; j<G[a].size(); j++)                        {                            int b=G[a][j];                           if(del[b]==false&&G[b].size()-leg[b]>1) cnt++;                        }                      if(cnt>2){                        falg=false; break;                      }                }                if(falg)puts("YES");                else puts("NO");    }    return 0;}
View Code

 

E. Bear and Drawing

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.