PAT (Advanced Level) 1032. Sharing (25)

简单题,不过数据中好像存在有环的链表......

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<map>
#include<queue>
#include<vector>
using namespace std; const int maxn=+;
struct Node
{
int id;
char c;
int nx;
} node[maxn];
int add1,add2,n; int s1[maxn],s2[maxn];
int len1=,len2=;
int m[maxn]; int main()
{
memset(m,-,sizeof m);
scanf("%d%d%d",&add1,&add2,&n);
for(int i=; i<=n; i++)
{
scanf("%d",&node[i].id);
m[node[i].id]=i;
cin>>node[i].c;
scanf("%d",&node[i].nx);
} for(int i=; i<=n; i++)
{
if(node[i].nx==-) continue;
node[i].nx=m[node[i].nx];
} memset(s1,-,sizeof s1);
memset(s2,-,sizeof s2); int now=m[add1]; while()
{
if(now==-) break;
s1[len1++]=now;
now=node[now].nx;
} now=m[add2]; bool flag[maxn];
memset(flag,,sizeof flag); int fail=; while()
{
if(now==-) break;
if(flag[now]==)
{
fail=;
break;
}
flag[now]=;
s2[len2++]=now;
now=node[now].nx;
} if(fail==)
{
printf("-1\n");
}
else
{
len1--;
len2--;
while(len1>=&&len2>=)
{
if(s1[len1]==s2[len2])
{
len1--;
len2--;
}
else break;
}
len1++;
len2++; if(s1[len1]==-) printf("-1\n");
else printf("%05d\n",node[s1[len1]].id);
}
return ;
}
上一篇:oracle取差值集合


下一篇:rman恢复至临时数据库