hdu5423 Rikka with Tree(DFS)

來源:互聯網
上載者:User

標籤:c語言   hdu   搜尋   

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=5423

題目大意:BC round# 53上有中文題意= =

思路:畫圖可以發現,其實題目本身不難。因為他有n個點,n條邊,所以可以確定只有一棵樹。

對於樹中的某一個點來說,如果他有多個分支,然後分支下面又有邊連出去,那麼這種情況就一定是NO了。

比如1和2、3相連,然後2又與4相連,3與5相連,那麼4和5就可以調換位置,此時這顆樹就不是特殊的了。

所以我可以利用深搜記錄下所有點的深度,對深度排序以後,如果有一種深度超過2個及以上,就看是否有比他深的點,如果有就是NO,否則是YES。

#include<stdio.h>#include<string.h>#include<algorithm>#define M 1005using namespace std;struct node{int to,next;}edge[M*100];int head[M*2];int n,tot,ans[1005],q,vis[1005];void add(int a,int b){edge[tot].to=b;edge[tot].next=head[a];head[a]=tot++;}int t=0;void dfs(int x,int deep){int i,j;vis[x]=1;for(i=head[x];i!=-1;i=edge[i].next){j=edge[i].to;if(vis[j])continue;vis[j]=1;dfs(j,deep+1);}ans[q++]=deep;return;}int main(){  int i,j,u,v;  while(scanf("%d",&n)!=EOF)  {  q=0;  memset(vis,0,sizeof(vis));  memset(head,-1,sizeof(head));  tot=0;  for(i=1;i<n;i++)  {  scanf("%d%d",&u,&v);  add(u,v);  add(v,u);   //建樹  }  int deep=0,f;  f=0;dfs(1,0);int as=0,mark=0;sort(ans,ans+q-1);for(i=1;i<q-1;i++){if(ans[i]==ans[i-1]){mark=1; as=ans[i];}   //判斷是否有兩個一樣的深度。即判斷是否有分支。     if(ans[i]>as&&mark)f=1;     //在分支下如果還有點,就是NO了。  } if(f)printf("NO\n"); else printf("YES\n");  }  return 0;}


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

hdu5423 Rikka with Tree(DFS)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.