原题
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct leaf
{
int brother , son;
string data;
}tree[10000];
int n , cnt;
string in , str;
vector <string> r;
bool first = true;
int creat (string name)
{
cnt++;
tree[cnt].data = name;
return cnt;
}
void find (int i , int it , vector <string> in)
{
if (i == (int)in.size()-1) return;
if (tree[it].data == in[i])
{
if (tree[it].son)
{
find (i+1 , tree[it].son , in);
}
else
{
tree[it].son = creat(in[i+1]);
find (i+1 , tree[it].son , in);
}
}
else
{
if (tree[it].brother)
{
find (i , tree[it].brother , in);
}
else
{
tree[it].brother = creat(in[i]);
find (i+1 , tree[it].brother , in);
}
}
return;
}
void test()
{
for (int i = 1 ; i <= cnt ; i++)
{
cout << tree[i].data << endl;
}
return;
}
int main()
{
cin >> n;
while (n--)
{
str.clear();
r.clear();
cin >> in;
for (unsigned i = 0 ; i < in.size() ; i++)
{
if (in[i] == '/')
{
if (str.empty()) continue;
else
{
r.push_back(str);
str.clear();
}
}
else
str = str+in[i];
}
r.push_back(str);
if (first)
{
creat(r[0]);
first = false;
}
find (0 , 1 , r);
cout << cnt << endl;
}
return 0;
}