COGS 244. [POI2000] 滑雪队

244. [POI2000] 滑雪队

一个滑雪队在Byte山上组织了一次训练。山的北坡有一个滑雪场,所有的滑雪者都要从山上的起点站滑到山下的终点站。此次训练中各队员同时出发到终点站会合,除了始末两处外,队员们的滑雪路径不能相交,且山上的滑雪道只能从上往下滑。

滑雪道的分布地图由多块被林地连接的空地组成,每块空地都处于不同的高度。两块空地间至多由一块林地连接。滑雪过程中,滑雪者可以选择路径访问任一空地(但不必全部经过)。各滑雪道只在空地相会,既不穿隧道,也不临空飞越。

任务:

编写一个程序完成下列工作:

  • 读入滑雪场的地图;
  • 算出能参加训练的最大队员数;
  • 把结果写入文件。

输入:

文件的第一行是空地的数目n,2≤n≤5000。以下n-1行,每行都有一些用空格分开的整数,第(i+1)行的数字描述的是从空地i沿林 地往下可到达的其它空地。该行第一个整数k表示这些空地的个数,以下k个整数即它们的编号,按从东到西的顺序排列(即通向各空地的林地的位置)。空地从1 到n编号。起点站建于空地1,终点站建于空地n。

输出:

仅一行,包括一个整数,即能参加训练的最大人数。

输入样例:

15
5 3 5 9 2 4
1 9
2 7 5
2 6 8
1 7
1 10
2 14 11
2 10 12
2 13 10
3 13 15 12
2 14 15
1 15
1 15
1 15

输出样例:

3

如下图

我看一眼,以为是网络流。。

结果发现 dfs就可以搞定 不需要那么麻烦 (实际上我并不知道网络流能不能做。。)

小小的贪心 每次我们都从东边开始走 标记为已走过

走不动再换路 记录走过的路径数 输出

 1 #include <vector>
 2 #include <cctype>
 3 #include <cstdio>
 4
 5 const int MAXN=5010;
 6
 7 int n,ans;
 8
 9 bool vis[MAXN];
10
11 std::vector<int> v[MAXN];
12
13 inline void read(int&x) {
14     int f=1;register char c=getchar();
15     for(x=0;!isdigit(c);c==‘-‘&&(f=-1),c=getchar());
16     for(;isdigit(c);x=x*10+c-48,c=getchar());
17     x=x*f;
18 }
19
20 inline bool pd() {
21     for(int i=0;i<v[1].size();++i)
22       if(!vis[v[1][i]]) return true;
23     return false;
24 }
25
26 void DFS(int u,bool&flag) {
27     if(u==n) {vis[u]=true;++ans;flag=true;return ;}
28     if(vis[u]&&u!=1) return;
29     vis[u]=true;
30     for(int i=0;i<v[u].size();++i) {
31         int to=v[u][i];
32         DFS(to,flag);
33         if(flag) return;
34     }
35     return;
36 }
37
38 int hh() {
39     freopen("nar.in","r",stdin);
40     freopen("nar.out","w",stdout);
41     int len;
42     read(n);
43     for(int i=1;i<n;++i) {
44         read(len);
45         for(int x;len--;) {
46             read(x);
47             v[i].push_back(x);
48         }
49     }
50     bool flag;
51     while(pd()) flag=false,DFS(1,flag);
52     printf("%d\n",ans);
53     return 0;
54 }
55
56 int sb=hh();
57 int main(int argc,char**argv) {;}

代码

时间: 2024-11-08 22:22:50

COGS 244. [POI2000] 滑雪队的相关文章

cogs 36.求和问题

36. 求和问题 ★   输入文件:sum.in   输出文件:sum.out   简单对比时间限制:1.2 s   内存限制:128 MB [问题描述] 在一个长度为n的整数数列中取出连续的若干个数,并求它们的和. [输入格式] 输入由若干行组成,第一行有一个整数n    第二行有n个整数    第三行有一个整数m    下面m行,每行两个整数i与j(i<=j),表示求和的起始和终止位置. [输出格式] 输出有m行, 每行一个整数,表示这个数段数列的和. [输入样例] 输入文件 82 3 4

COGS基本法初稿

COGS基本法 序言 我们COGS人民,为建立更完善的联盟,树立正义,保障网络安宁,提供公共OJ,杜绝极少数恐怖分子对我OJ的破坏行为,并使我们自己和OIER得享自由的幸福,特为COGS制定本基本法. 第一条权利机构 权利机构由老常为领导核心的第一代领导集体及COGS QQ群的元老组成,COGS的权力机构为君主立宪制,其中老常为世袭君主,议会由首相刘易铖,长老王梦迪,内阁大臣张灵犀,外交大臣张子昂.国家工程师李冬麟组成.首相.内阁大臣.外交大臣必须由河南省实验中学有着良好素质和学习水平的学生组成

COGS——T 2739. 凯伦和咖啡

http://www.cogs.pro/cogs/problem/problem.php?pid=2739 ★★☆   输入文件:coffee.in   输出文件:coffee.out   简单对比时间限制:1 s   内存限制:512 MB [题目描述] 为了在上课时保持清醒,凯伦需要一些咖啡.咖啡爱好者凯伦想知道最佳的温度来冲煮完美的咖啡.因此,她花了一些时间阅读几本食谱,其中包括广受好评的“咖啡的艺术”. 她知道有n个食谱,其中第i个食谱建议应当在li和ri度之间冲煮以达到最佳的味道.凯伦

COGS——T 8. 备用交换机

http://www.cogs.pro/cogs/problem/problem.php?pid=8 ★★   输入文件:gd.in   输出文件:gd.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间接与其它城市连接.因电子设备容易损坏,需给通讯点配备备用交换机.但备用交换机数量有限,不能全部配备,只能给部分重要城市配置.于是规定:如果某个城市由于交换机损坏,不仅本城市通讯中断,还造成其它城市通讯中断,则配

COGS——C2098. Asm.Def的病毒

http://www.cogs.pro/cogs/problem/problem.php?pid=2098 ★☆   输入文件:asm_virus.in   输出文件:asm_virus.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] “这就是我们最新研制的,世界上第一种可持久化动态计算机病毒,‘创世纪’.”方教授介绍道. “哦.”主席面无表情地点点头. “‘创世纪’无法真正杀死透明计算网络,但是可以把它变成傻子.可惜透明计算网络能轻松地辨认出病毒,所以我建议……

COGS 497——奶牛派对

http://218.28.19.228/cogs/problem/problem.php?pid=497 我们发现每头牛需要走的路程即为它到x的最短路+x到它的最短路. 转化: 于是这道题变成了一道典型的单源最短路问题,只需求出每个点到x的最短路dl,以及从x到此点的最短路d2,然后去找max(dl+d2)即可. 效率分析: 使用dijsktra算法,时间复杂度为O(n^2). [我的程序] 1 type aa=array[1..1000,1..1000] of longint; 2 var

Calculation of COGM and COGS

Use You can use the Product Cost Planning functions to calculate the cost of goods manufactured (COGM) and cost of goods sold (COGS) for products such as materials and services. The costs may then be analyzed and business decisions (such as "make or

Codeforces Round #244 (Div. 2)——Match &amp; Catch

题目链接 题意:给两个长度分别为n和m的序列,现在有两种操作:1.分别选择两个序列的一个非空前缀,切两个前缀的最后一位相同,删除之,得到1分(只累计),消耗e:2.直接删除两个序列,消耗值定于两个序列之前删除的元素个数之和,并且使得得到的分有效(之前没有有效分) 分析: 首先,问题其实就是转化成,进行若干次操作1,然后进行操作2 还要找到一个判别标准,来评判较优的状态(贪心) 每次的消耗值比较大,其实可以计算出最大的删除次数,这个值不是很大 状态表示: 简单的,一个状态可以表示为串A的位置.串B

Codeforces Round #244 (Div. 2)

A. Police Recruits B. Prison Transfer A,B两个是水题. C. Checkposts DFS找出所有的环就行了. 每次搜索一个结点u时,给u加一个递增标号low[u],同时记录搜索u及u的子结点过程中遇到的最小标号minc,也就是当搜索u的子结点v时,minc = min(minc, low[v]).搜索完成后,如果minc < low[u],说明搜索u的子结点时又回到了u的父结点,也就是说u在一个环中,然后求出这个环的最小费用及取到最小费用的结点数. D.