本来想的方法是根据样例第三列后继地址的重复的关系求公共节点地址,一般公共地址都会出现两次,如果没有公共节点-1也会出现两次
但是好像只能过前三个测试点,不知道是不是输入节点可能包含相同节点的重复,或者一些无用节点
五位数的地址题目中说了,The address of a node is a 5-digit positive integer.因而不会出现00000。所以addr数组初始化就设置为了0
#include<iostream>
using namespace std;
int addr[100001] = {0};
int visited[100001] = {0};
int main(){
int s1, s2, n;
scanf("%d%d%d",&s1,&s2,&n);
for(int i = 0; i < n; i++){
int add;
scanf("%d",&add);
// getchar();
// getchar();
// getchar();
scanf(" %*c %d",&addr[add]);
}
if(s1 == s2){
printf("%05d",s1);
return 0;
}
while(s1 != -1){
visited[s1] = 1;
s1 = addr[s1];
}
while(s2 != -1){
if(visited[s2] == 1){
printf("%05d",s2);
return 0;
}
s2 = addr[s2];
}
printf("-1");
return 0;
}