B - Resort CodeForces - 350B

题目链接
B. Resort
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
Valera’s finally decided to go on holiday! He packed up and headed for a ski resort.

Valera’s fancied a ski trip but he soon realized that he could get lost in this new place. Somebody gave him a useful hint: the resort has n objects (we will consider the objects indexed in some way by integers from 1 to n), each object is either a hotel or a mountain.

Valera has also found out that the ski resort had multiple ski tracks. Specifically, for each object v, the resort has at most one object u, such that there is a ski track built from object u to object v. We also know that no hotel has got a ski track leading from the hotel to some object.

Valera is afraid of getting lost on the resort. So he wants you to come up with a path he would walk along. The path must consist of objects v1, v2, …, vk (k ≥ 1) and meet the following conditions:

Objects with numbers v1, v2, …, vk - 1 are mountains and the object with number vk is the hotel.
For any integer i (1 ≤ i < k), there is exactly one ski track leading from object vi. This track goes to object vi + 1.
The path contains as many objects as possible (k is maximal).
Help Valera. Find such path that meets all the criteria of our hero!

Input
The first line contains integer n (1 ≤ n ≤ 105) — the number of objects.

The second line contains n space-separated integers type1, type2, …, typen — the types of the objects. If typei equals zero, then the i-th object is the mountain. If typei equals one, then the i-th object is the hotel. It is guaranteed that at least one object is a hotel.

The third line of the input contains n space-separated integers a1, a2, …, an (0 ≤ ai ≤ n) — the description of the ski tracks. If number ai equals zero, then there is no such object v, that has a ski track built from v to i. If number ai doesn’t equal zero, that means that there is a track built from object ai to object i.

Output
In the first line print k — the maximum possible path length for Valera. In the second line print k integers v1, v2, …, vk — the path. If there are multiple solutions, you can print any of them.

Examples
inputCopy
5
0 0 0 0 1
0 1 2 3 4
outputCopy
5
1 2 3 4 5
inputCopy
5
0 0 1 0 1
0 1 2 2 4
outputCopy
2
4 5
inputCopy
4
1 0 0 0
2 3 4 2
outputCopy
1
1

题意:

0 0 1 0 1 第一行n个整数,分别代表第1个顶点一直到第n个顶点是山还是旅馆
0 1 2 2 4 第二行n个整数,分别代表(0 --> 1),(1 --> 2),(2 --> 3),(3 --> 4),(4 --> 5)

在这里插入图片描述
求最长的一条路的长度以及路径,这条路不允许有分岔路口,并且这条路的终点必须是旅馆,所以:

2
4 5

思路:
反向建图,从酒店开始往外走,记录最长的路径,如果一个节点可以从多个点到达就说明这个点是岔路口不再往下搜,如果这个点是酒店也停止搜索,没有往下走的路时也停止,所谓的搜索就是遍历。

#include<cmath>
#include<cstdio>
#include<cstring>
const int mmax=100005;
int ss[mmax],map[mmax];
int ok[mmax],ans[mmax];
int path[mmax];
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        memset(ok,0,sizeof ok);
        for(int i=1;i<=n;i++)
            scanf("%d",&ss[i]);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&map[i]);
            ok[map[i]]++;                  ///记录这个点是否是单条路线的点
        }
        int anse=0;
        for(int i=1;i<=n;i++)
        {
            if(ss[i]==1)
            {
                int e=0,t=i;
                path[e++]=t;
                while(map[t]!=0 && ok[map[t]]<2)    ///两个退出条件
                {
                    path[e++]=map[t];
                    t=map[t];
                }
                if(e>anse)
                {
                    anse=e;
                    for(int j=0;j<anse;j++)
                        ans[j]=path[j];
                }
            }
        }
        printf("%d\n",anse);
        for(int i=anse-1;i>=0;i--)
            printf("%d ",ans[i]);
        puts("");
    }
    return 0;
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信博6主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值