题意:删除一棵树上的叶子 每删除一片叶子就写下连着该片叶子的节点 让你还原一棵树
记录每个节点连着的叶子数 0表示此时这个节点就是叶子 -1表示这个节点已经删除 删除的只能是0 就是说是叶子 暴力一下就好了
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> g[7550];
int a[7550];
int b[7550];
int main()
{
int n = 0;
memset(b , 0, sizeof(b));
while(scanf("%d",&a[n]) == 1)
{
b[a[n]]++;
n++;
}
for(int i = 1; i <= n+1; i++)
g[i].clear();
for(int i = 0; i < n; i++)
{
if(b[a[i]] > 0)
{
for(int j = 1; j <= n+1; j++)
if(b[j] == 0)
{
g[a[i]].push_back(j);
g[j].push_back(a[i]);
b[j]--;
b[a[i]]--;
break;
}
}
}
for(int i = 1; i <= n+1; i++)
{
sort(g[i].begin(), g[i].end());
printf("%d:",i);
int len = (int)g[i].size();
for(int j = 0; j < len; j++)
printf(" %d",g[i][j]);
puts("");
}
return 0;
}