Uva-Live Archive3902-Network
2013-03-17 14:16
417 查看
一道DFS搜索题,更新的时候需要注意下
代码:
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<vector> #define MAX 1010 using namespace std; vector<int> gr[MAX],node[MAX]; int n,s,k,fa[MAX],ans; bool vis[MAX]; void DFS(int u,int f,int deep) { fa[u]=f; int num=gr[u].size(); if(num==1&&deep>k) node[deep].push_back(u); for(int i=0;i<num;i++) { int v=gr[u][i]; if(v!=f) DFS(v,u,deep+1); } } void DFSS(int u,int f,int deep) { vis[u]=1; int num=gr[u].size(); for(int i=0;i<num;i++) { int v=gr[u][i]; if(v!=f&&deep<k) DFSS(v,u,deep+1); } } void Solve() { for(int i=n-1;i>k;i--) { for(int j=0;j<node[i].size();j++) { int u=node[i][j]; if(vis[u]) continue; int v=u; for(int l=0;l<k;l++) v=fa[v]; DFSS(v,-1,0); ans++; } } } int main() { int cas; scanf("%d",&cas); while(cas--) { ans=0; memset(vis,0,sizeof(vis)); scanf("%d%d%d",&n,&s,&k); for(int i=0;i<=n;i++) { gr[i].clear(); node[i].clear(); } for(int i=0;i<n-1;i++) { int ita,itb; scanf("%d%d",&ita,&itb); gr[ita].push_back(itb); gr[itb].push_back(ita); } DFS(s,-1,0); Solve(); printf("%d\n",ans); } return 0; }
相关文章推荐
- UVALive - 3902 Network 无根树转为有跟树+搜索+贪心
- UVALive3902 Network[贪心 DFS&&BFS]
- UVaLive(LA) 3902 Network,Seoul 2007
- UVALive - 3902 Network
- 算法竞赛入门经典训练指南 例题1-15 网络 Network UVALive 3902
- 寒假集训 Day 7 H题 UVALive - 3902 Network 网络
- (06-08补)UVALive 3902 Network 网络
- UVaLive 3902 Network (无根树转有根树,贪心)
- UVALive - 3902 Network 无根树转为有跟树
- UVA Live Archive的一个坑点
- ACM-ICPC Live Archive 3031 Cable TV Network
- LA 3902 UVA 1267 - Network
- UVALive 6275 (ACM-ICPC Live Archive: 6275 ) Joint Venture(二分)
- UVA Live Archive 4394 String painter(区间dp)
- UVALive 3902 网络
- UVA 1267 && LA 3902 Network (思路--树上的DFS)
- UVA Live Archive 4490 Help Bubu(状压dp)
- 例题1.15 网络 UVALive 3902
- UvaLive 6435 Network Packet Ordering(dp)
- uva 1401 && Live Archive 3942 Remember the Word