标签:
紫书:P352
#include <iostream> #include <vector> #include <cstring> using namespace std; int p[100]; vector<int> G[100]; //邻接表 int n; void read_tree() { int u,v; cin>>n; for(int i=0;i<n-1;i++) { cin>>u>>v; //只是告知边,没有从属关系 G[u].push_back(v); G[v].push_back(u); } } void dfs(int u,int fa) { //使u成为与他相连之边的父节点 for(int i=0;i<G[u].size();i++) { int v=G[u][i]; if(v!=fa) dfs(v,p[v]=u); } } int main() { while(1) { read_tree(); memset(p,0,sizeof(p)); int root; cin>>root; p[root]=-1; dfs(root,-1); for(int i=0;i<=n-1;i++) cout<<p[i]<<" "; cout<<"\n"; } return 0; }
测试数据:
8
0 1
0 2
0 3
1 4
1 5
5 6
5 7
1
结果:
1 -1 0 0 1 1 5 5
标签:
原文地址:http://www.cnblogs.com/zsyacm666666/p/5005148.html