#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
#include <math.h>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
using namespace std;
typedef struct node
{
int add;
long long name;
int next;
};
set<long long> visited;
int main(void)
{
long long N;
int root;
cin>>root>>N;
map<int,node> list;
for(long long i=0;i<N;i++)
{
int add,next;
int name;
cin>>add>>name>>next;
node temp;
temp.add = add;
temp.next = next;
temp.name = name;
list.insert(make_pair(add,temp));
}
vector<node> selected;
vector<node> removed;
int address = root;
while(1)
{
node curnode = list[address];
if(visited.count(abs(curnode.name))>0)//访问过
{
removed.push_back(curnode);
}
else
{
visited.insert(abs(curnode.name));
selected.push_back(curnode);
}
address = curnode.next;
if(address == -1)
break;
}
if(selected.size()>0)
{
for(long long i =0;i<selected.size()-1;i++)
{
selected[i].next = selected[i+1].add;
printf("%05d %d %05d\n",selected[i].add, selected[i].name, selected[i].next);
}
printf("%05d %d %d\n",selected[selected.size()-1].add, selected[selected.size()-1].name, -1);
}
if(removed.size()>0)
{
for(long long i =0;i<removed.size()-1;i++)
{
removed[i].next = removed[i+1].add;
printf("%05d %d %05d\n",removed[i].add, removed[i].name, removed[i].next);
}
printf("%05d %d %d\n",removed[removed.size()-1].add, removed[removed.size()-1].name, -1);
}
system("pause");
return 0;
}
[PAT]1097. Deduplication on a Linked List (25)
最新推荐文章于 2022-10-26 05:05:48 发布