Code the Tree ZOJ - 1097
Posted IKnowYou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Code the Tree ZOJ - 1097相关的知识,希望对你有一定的参考价值。
传送门:https://vjudge.net/problem/ZOJ-1097
解题思路:
主要是找到每一节点的相邻节点,然后后面的用优先队列就行了。
#include <cstdio> #include <queue> #include <vector> #include <set> #include <iostream> using namespace std; void parse(vector<set<int> >&adj,unsigned int p=0){ unsigned int x; cin>>x; if(p){ adj[x].insert(p); adj[p].insert(x); } while(true){ char ch; cin>>ch; if(ch==\')\') break; parse(adj,x); } return ; } int main(){ char ch; while(cin>>ch){ vector<set<int> >adj(1020,set<int>()); parse(adj); priority_queue<int,vector<int>,greater<int> >leafs; int n=0; for(int i=0;i<adj.size();i++){ if(adj[i].size()!=0){ n++; if(adj[i].size()==1){ leafs.push(i); } } } for(int k=1;k<n;k++){ int x=leafs.top(); leafs.pop(); if(k>1) cout<<" "; int p=*(adj[x].begin()); cout<<p; adj[p].erase(x); if(adj[p].size()==1) leafs.push(p); } cout<<endl; } return 0; }
以上是关于Code the Tree ZOJ - 1097的主要内容,如果未能解决你的问题,请参考以下文章
POJ 2567 Code the Tree & POJ 2568 Decode the Tree Prufer序列