File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ /*
2+ Idea:
3+ - Using recursion we can build the tree from the input.
4+ - When the tree is ready to use we can use priority queue
5+ to track the leaf nodes.
6+ - Each time we remove a node from the tree we can remove it
7+ from the `vector` of the parent node.
8+ */
9+
10+ #include < bits/stdc++.h>
11+
12+ using namespace std ;
13+
14+ char s[10001 ];
15+ int n, len;
16+ vector<int > sol;
17+ vector<vector<int > > g;
18+ priority_queue<int > pq;
19+
20+ int getInt (int idx) {
21+ int ret = 0 ;
22+ while (isdigit (s[idx]))
23+ ret *= 10 , ret += (s[idx++] - ' 0' );
24+ return ret;
25+ }
26+
27+ void build (int idx, int par) {
28+ int cur = getInt (idx);
29+ n = max (n, cur);
30+
31+ if (par != -1 )
32+ g[par].push_back (cur),
33+ g[cur].push_back (par);
34+
35+ for (int i = idx, cnt = 1 ; i < len; ++i) {
36+ cnt += s[i] == ' (' ;
37+ cnt -= s[i] == ' )' ;
38+ if (cnt == 0 )
39+ break ;
40+ if (s[i] == ' (' && cnt == 2 )
41+ build (i + 1 , cur);
42+ }
43+ }
44+
45+ void rmv (int from, int target) {
46+ for (int i = 0 ; i < g[from].size (); ++i)
47+ if (g[from][i] == target) {
48+ g[from].erase (g[from].begin () + i);
49+ break ;
50+ }
51+ }
52+
53+ int main () {
54+ while (fgets (s, sizeof s, stdin)) {
55+ n = 0 ;
56+ len = strlen (s);
57+ g.clear ();
58+ g.resize (1001 );
59+ build (1 , -1 );
60+
61+ for (int i = 1 ; i <= n; ++i)
62+ if (g[i].size () == 1 )
63+ pq.push (-i);
64+
65+ sol.clear ();
66+ while (!pq.empty ()) {
67+ int top = -pq.top ();
68+ pq.pop ();
69+
70+ sol.push_back (g[top][0 ]);
71+ rmv (g[top][0 ], top);
72+ if (g[g[top][0 ]].size () == 1 )
73+ pq.push (-g[top][0 ]);
74+ }
75+
76+ for (int i = 0 ; i < int (sol.size ()) - 1 ; ++i)
77+ printf (" %s%d" , i == 0 ? " " : " " , sol[i]);
78+ puts (" " );
79+ }
80+
81+ return 0 ;
82+ }
Original file line number Diff line number Diff line change 1+ # Problems
2+
3+ - [ 1097 - Code the Tree] ( http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=97 )
You can’t perform that action at this time.
0 commit comments