Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stack>
- #include<math.h>
- #include<time.h>
- #include<iostream>
- #include<algorithm>
- #include<string>
- #include<set>
- #include<iomanip>
- #include<vector>
- #include<map>
- #include<cassert>
- #include<queue>
- #include <tuple>
- using namespace std;
- typedef long long li;
- typedef long double ld;
- #define forn(i, n) for (int i = 0; i < int(n); ++i)
- #define pb push_back
- #define mp make_pair
- #define shek_shek _DEBUG
- #define mt make_tuple
- #define aaaa(n) get<(n)>(aaaa)
- #define all(v) v.begin(),v.end()
- #define EPS 1e-9
- #define PI 3.1415926535897932384626433832795
- map <string, int> roots;
- map <string, set <string>> v;
- int depth = 0;
- void dfs(string s) {
- forn (i, depth)
- cout << '+';
- cout << s << endl;
- if (v[s].empty())
- return;
- for (set <string> :: iterator it = v[s].begin(); it != v[s].end(); it++) {
- depth++;
- dfs(*it);
- depth--;
- }
- }
- int main () {
- #ifdef shek_shek
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- int n;
- cin >> n;
- forn (i, n) {
- string s, prev = "", tek = "";
- cin >> s;
- forn (j, s.size()) {
- if (s[j] == '/' || j == s.size() - 1) {
- if (j == s.size() - 1)
- tek += s[j];
- if (prev.empty() && roots[tek] == 0)
- roots[tek] = 0;
- if (!prev.empty()) {
- v[prev].insert(tek);
- roots[tek]++;
- }
- prev = tek, tek = "";
- } else
- tek += s[j];
- }
- }
- bool ok = true;
- while (ok) {
- ok = false;
- for (map <string, int> :: iterator it = roots.begin(); it != roots.end(); it++) {
- if ((*it).second != 0) {
- ok = true;
- roots.erase(it);
- break;
- }
- }
- }
- for (map <string, int> :: iterator it = roots.begin(); it != roots.end(); it++) {
- dfs((*it).first);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement