题目链接:http://codeforces.com/problemset/problem/350/B

一开始想复杂了,建了张图,结果效率太低T了。其实用数组存可以了,结果发现的时候快没时间了,修改好前5分钟比赛就结束了,泪目。。。

题目大意:每个地点有用1表示旅馆,用0表示是山地。每个地点用一个数表示能从哪一个地点到达这里(单向)。现在要求一条最长的路径,除了终点为旅馆外,前面的路径上都是山地。要求前面的路上不能有分岔路,即从该点出发只有一条可行路。

解题思路:开一个数组存到达该点的始发地,再开一个数组存以某点为起点的路径有几条,不为1即可删去不计。然后从每一个旅馆开始向前深搜,找出最长的路径。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define N 100005
#define M 200010
int ob[N],ro[N];
int hotel[N],K,road[N],road2[N];//hotel记录每个旅馆的位置,road存最长路径
int v[N],link[N];//v记录到达该点的始发地,link记录以每一个点为起点有多少条路径
void dfs(int now ,int num)//now表示搜到了哪一个,num表示加上该点路径有多长
{
int i,k;
if(link[now]>)
{
return;
}
road2[num-]=now;
if(K<num&&(link[v[now]]>||v[now]==))//当搜到下一个点有超过一条路径,或者连接该点的是一条无效路径时可更新最大值
{
K=num;
for(i=;i<K;i++)
road[i]=road2[i];
}
if(v[now]&&link[v[now]]<=)
dfs(v[now],num+);
}
int main()
{
memset(link,,sizeof(link));
int n,i,cnt=,e=;
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d",&ob[i]);
if(ob[i]==)
hotel[cnt++]=i;
}
for(i=;i<=n;i++)
{
scanf("%d",&ro[i]);
if(ro[i]){
v[i]=ro[i];
link[ro[i]]+=;
}
}
for(i=;i<cnt;i++)
{
if(K==)
{
K=;
road[]=hotel[i];
}
dfs(hotel[i],);
}
printf("%d\n",K);
for(i=K-;i>=;i--)
{
if(i)
printf("%d ",road[i]);
else
printf("%d",road[i]);
}
printf("\n");
return ;
}

最新文章

  1. TODO:macOS编译PHP7.1
  2. SQL Server 解读【已分区索引的特殊指导原则】(3) - 非聚集索引分区
  3. easyui-window 关闭事件,只要关闭窗口就会触发
  4. latex中页面距离的设置
  5. python 100例 (持续更新)
  6. UE4在C++中使用OnComponentBeginOverlap之类的时间
  7. error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义
  8. 条形码软件开发包Dynamic .NET TWAIN v5.0提供WPF功能
  9. (转载)SQL中导入图片
  10. Maven构建灵活配置文件
  11. LR(1)表驱动语法分析设计图表
  12. SCXML和QScxml使用总结
  13. Filebeat中文指南
  14. 异常-----web.xml文件报错 Multiple annotations found at this line: - cvc-complex-type.2.4.b: The content of element &#39;welcome-file-list&#39; is not complete. One of &#39;{&quot;http://java.sun.c
  15. 初读&quot;Thinking in Java&quot;读书笔记之第九章 --- 接口
  16. php插入日志到数据库,对象转json
  17. (转).net反编译工具JustDecompile
  18. js第三天知识点 循环
  19. [root]既然sudo 可以暂时获取root权限,那么为何还需要root这个用户呢
  20. Linux 任务计划:crontab

热门文章

  1. the account is currently locked out. The system administrator can unlock it.
  2. xp和win 2003远程桌面强制进入命令
  3. git 常见问题收集(持续更新中)
  4. OC - 15.NSURLSession与NSURLSessionTask
  5. js获取时间天数
  6. uboot移植之环境变量在NandFlash
  7. MongoDB在windows服务器安装部署及远程连接MongoDB
  8. Noah的学习笔记之Python篇:命令行解析
  9. mongodb常用命令【转】
  10. 关于64位Win7/Win 8 下怎么学习汇编语言