【题解】跳伞登山赛

题目描述

某山区有高高低低的n个山峰,根据海拔高度的不同,  这些山峰由低到高进行了1到n编号。

有m条只能单向通行的羊肠小道连接这些山峰。现在,这里要举行一场跳伞登山赛,选手们伞降到某山峰后,再通过山间小道向属于自己的最高峰进军。

小明也参加了这次比赛,你能否告诉他,从任意一座山峰出发所能到达的最高峰编号是多少?

输入输出格式

输入格式

输入共m+1行。

第1行为2个整数n、m,用一个空格隔开,表示山峰总数和道路总数。

接下来m行,每行2个整数,用一个空格隔开,表示一条道路的起点和终点山峰编号。

输出格式

输出共1行,n个整数,用一个空格隔开,表示每座山峰所能到达的最高峰的编号。

输入输出样例

输入样例

4 3

1 2

2 4

4 3

输出样例

4 4 3 4

说明

数据规模

60%的数据满足:1≤m,n≤1000。

100%的数据满足:1≤m,n≤10000。

题解

从最高峰开始枚举,更新所有未被遍历过的山峰。

#include <iostream>
#include <set>
#define MAX_N 100001 

using namespace std;

int n;
set<int> s[MAX_N];
int ans[MAX_N];
void DFS(int, int);

int main()
{
    int m;
    cin >> n >> m;
    while(m--)
    {
        int prev, next;
        cin >> next >> prev;
        s[prev].insert(next);
    }
    for(register int i = n; i >= 1; i--)
    {
        if(!ans[i]) DFS(i, i);
    }
    for(register int i = 1; i <= n; i++)
    {
        cout << ans[i];
        if(i < n) cout << ‘ ‘;
    }
    return 0;
} 

void DFS(int idx, int val)
{
    ans[idx] = val;
    while(!s[idx].empty())
    {
        int next;
        next = *s[idx].begin();
        s[idx].erase(s[idx].begin());
        if(!ans[next]) DFS(next, val);
    }
    return;
}

参考程序

原文地址:https://www.cnblogs.com/kcn999/p/10624810.html

时间: 2024-08-29 13:26:22

【题解】跳伞登山赛的相关文章

天梯赛题解 L1-049 天梯赛座位分配

L1 水题完结撒花 L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队. 输入格式: 输入第一行给出4个正整数N.M.S.D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1):M是快速道路的条数

膝盖中了一箭之康复篇-一周年纪念

右膝盖前十字韧带在2014年12月份的一次常规踢球中不小心弄断.2015年5月份才确诊.随后2个月后的7月1日做了十字韧带重建术.到现在刚好是术后一年了. 总体来说恢复的情况我还比较满意.虽然两条腿的肌肉还不是很平衡,甚至在下雨天的时候右膝还有点隐隐作痛.但是好在我还可以继续运动,比如跑步.踢球.打球等.虽然不能再像以前那么勇猛. 先盘点一下6月份的情况. 6月份跑步出勤5次,总跑量52.75公里.其中包括两次半程马拉松,还有一次9公里的越野跑.这个9公里的越野跑是参加赵公山的登山赛.上行4.5

hdu_5965_扫雷(递推)

题目链接:hdu_5965_扫雷 题意: 中文,还是自己看吧. 题解: 现场赛这题用的状压DP过的,不过现在想想当时还确实想复杂了,冷静下来仔细思靠一下,其实第i-1个确定了,那么第i个也是确定的,可以递推出来. 设dp[i]表示第i列的雷数,然后枚举一下第一列的雷数,就可以推出所有的雷,然后算一下贡献 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 5

二叉搜索树(二叉排序搜索树)

二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4117    Accepted Submission(s): 1802 Problem Description 判断两序列是否为同一二叉搜索树序列 Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度

HDU 5546 Ancient Go DFS

Ancient Go Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 1732    Accepted Submission(s): 552 Problem Description Yu Zhou likes to play Go with Su Lu. From the historical research, we found tha

湖南省第十一届大学生程序设计竞赛:Internet of Lights and Switches(HASH+二分+异或前缀和)

Internet of Lights and Switches Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3  Solved: 3[Submit][Status][Web Board] Description You are a fan of "Internet of Things"(IoT, 物联网), so you build a nice Internet of Lights and Switches in your huge

2016ACM青岛区域赛题解

A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 57    Accepted Submission(s): 49 Problem Description Recently, paleoanthropologists have found historical remains on an

【题解】PAT团体程序设计天梯赛 - 模拟赛

由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 设计一个分数类,重载加法运算符,注意要约分,用欧几里得算法求个最大公约数即可. 1 #include <cstdio> 2 3 long long abs(long long x) 4 { 5 return x < 0 ? -x : x; 6 } 7 8 long long gcd(long

2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 题解&amp;源码

Problem A: pigofzhou的巧克力棒 Description 众所周知,pigofzhou有许多妹子.有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们.具体地,这根巧克力棒长为 n,他想将这根巧克力棒折成 n 段长为 1 的巧克力棒,然后分给妹子们. 但是他妹子之一中的 15zhazhahe 有强迫症.若它每次将一根长为 k 的巧克力棒折成两段长为 a 和 b 的巧克力棒,此时若 a=b,则15zhazhahe会得到一点高兴值. pigofzhou想知