| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
顶点数20000了么?v1和v2开18888过不了
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef unsigned int uii;
int n,id,pt,d1,d2,cas;
char s[20005];
vector<int> v1[20005],v2[20005];
void dfs1(int u,int de) {
d1=max(d1,de);
while (s[++pt]=='d') {
v1[u].push_back(++id);
dfs1(id,de+1);
}
}
void dfs2(int u) {
for (uii i=0;i<v1[u].size();++i) {
if (i==0)
v2[u].push_back(v1[u][i]);
else
v2[v1[u][i-1]].push_back(v1[u][i]);
dfs2(v1[u][i]);
}
}
void dfs3(int u,int de) {
d2=max(d2,de);
for (uii i=0;i<v2[u].size();++i)
dfs3(v2[u][i],de+1);
}
int main()
{
while (scanf("%s",s)==1&&s[0]!='#') {
pt=-1;
d1=d2=id=0;
n=strlen(s);
for (int i=0;i<n;++i) {
v1[i].clear();
v2[i].clear();
}
dfs1(0,0);
dfs2(0);
dfs3(0,0);
printf("Tree %d: %d => %d\n",++cas,d1,d2);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator