#include<iostream>
#include<sstream>
#include<queue>
#include<vector>
using namespace std;
typedef vector<int> ivec;
typedef vector<ivec> imat;
void print(imat& adj,int x,int p=0)
{
cout<<"("<<x;
for(ivec::iterator it=adj[x].begin();it!=adj[x].end();it++){
if(*it!=p){
cout<<" ";
print(adj,*it,x);
}
}
cout<<")";
}
int main()
{
string line;
while(getline(cin,line)){
stringstream sin(line);
ivec v;
int x;
while(sin>>x){
v.push_back(x);
// cout<<x<<endl;
}
int n=v.size()+1;
ivec deg(n+1,0);
for(int i=0;i<n-1;i++){
deg[v[i]]++;
}
priority_queue<int,ivec,greater<int> > leafs;
for(int i=1;i<=n;i++){
if(!deg[i])
leafs.push(i);
}
imat adj(n+1);
for(int i=0;i<n-1;i++){
x=leafs.top();
leafs.pop();
adj[x].push_back(v[i]);
adj[v[i]].push_back(x);
if(--deg[v[i]]==0)
leafs.push(v[i]);
}
print(adj,n);
cout<<endl;
}
return 0;
}
/*
5 2 5 2 6 2 8
*/
POJ 2568 (树的prufer码)
最新推荐文章于 2022-03-12 10:51:16 发布