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;
}
时间: 2024-10-23 08:10:14

Code the Tree ZOJ - 1097的相关文章

#Leet Code# Unique Tree

语言:Python 描述:使用递归实现 1 class Solution: 2 # @return an integer 3 def numTrees(self, n): 4 if n == 0: 5 return 0 6 elif n == 1: 7 return 1 8 else: 9 part_1 = self.numTrees(n-1) * 2 10 part_2 = 0 11 12 for i in range(1,n-1): 13 part_left = self.numTrees(

POJ Code the Tree 树的pufer编号

Code the Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2259   Accepted: 859 Description A tree (i.e. a connected graph without cycles) with vertices numbered by the integers 1, 2, ..., n is given. The "Prufer" code of such a

#Leet Code# Same Tree

语言:Python 描述:使用递归实现 1 # Definition for a binary tree node 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution: 9 # @param p, a tree node 10 # @param q, a tree node 11 # @return

Code the Tree

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2292   Accepted: 878 Description A tree (i.e. a connected graph without cycles) with vertices numbered by the integers 1, 2, ..., n is given. The "Prufer" code of such a tree is built

nyoj1254 Code the Tree (第七届河南省程序设计大赛)

题目1254 题目信息 运行结果 本题排行 讨论区 Code the Tree 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 A tree (i.e. a connected graph without cycles) with vertices numbered by the integers 1, 2, ..., n is given. The "Prufer" code of such a tree is built as follows: the

poj 2567 Code the Tree 河南第七届省赛

Code the Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2350   Accepted: 906 Description A tree (i.e. a connected graph without cycles) with vertices numbered by the integers 1, 2, ..., n is given. The "Prufer" code of such a

POJ 2567 Code the Tree &amp;amp; POJ 2568 Decode the Tree Prufer序列

题目大意:2567是给出一棵树,让你求出它的Prufer序列.2568时给出一个Prufer序列,求出这个树. 思路:首先要知道Prufer序列.对于随意一个无根树,每次去掉一个编号最小的叶子节点,并保存这个节点所连接的节点所得到的序列就是这棵树的Prufer序列. 这个序列有十分优雅的性质.它能与无根树一一相应.因此.两个标号一样的无根树得到的Prufer序列也一定是一样的. 此外,设一个节点的度数是d[i],那么他会在Prufer序列中出现d[i] - 1次. 2567:记录每个节点的度.依

POJ 2567 Code the Tree &amp; POJ 2568 Decode the Tree Prufer序列

题目大意:2567是给出一棵树,让你求出它的Prufer序列.2568时给出一个Prufer序列,求出这个树. 思路:首先要知道Prufer序列.对于任意一个无根树,每次去掉一个编号最小的叶子节点,并保存这个节点所连接的节点所得到的序列就是这棵树的Prufer序列.这个序列有十分优雅的性质,它能与无根树一一对应.因此,两个标号一样的无根树得到的Prufer序列也一定是一样的.此外,设一个节点的度数是d[i],那么他会在Prufer序列中出现d[i] - 1次. 2567:记录每一个节点的度,按照

zoj 1097 普吕弗序列

题目大意:输入一颗无根树的括号序列,求这棵树的普吕弗序列. 分析思路: 1)普吕弗序列,可以参考维基百科,其做法是找出树中编号最小的叶子节点,并将此叶子节点及边删除,并输出其邻接的节点标号: 2)递归地构造树,可以使用list<int> 数组来表示一个"邻接表",以存储构造的树: 3)使用优先队列来进行删除,奈何priority_queue没有迭代器访问,只能用堆排序,取最值: 代码: #include<iostream> #include<vector&