noip2016--D1--2

天天爱跑步

描述

小c同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。?天天爱跑步?是一个养成类游戏,需要玩家每天按时上线,完成打卡任务。

这个游戏的地图可以看作一一棵包含 个结点和 条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达。树上结点编号为从的连续正整数。

现在有个玩家,第个玩家的起点为 ,终点为  。每天打卡任务开始时,所有玩家在第秒同时从自己的起点出发, 以每秒跑一条边的速度, 不间断地沿着最短路径向着自己的终点跑去, 跑到终点后该玩家就算完成了打卡任务。 (由于地图是一棵树, 所以每个人的路径是唯一的)

小C想知道游戏的活跃度, 所以在每个结点上都放置了一个观察员。 在结点的观察员会选择在第秒观察玩家, 一个玩家能被这个观察员观察到当且仅当该玩家在第秒也理到达了结点  。 小C想知道每个观察员会观察到多少人?

注意: 我们认为一个玩家到达自己的终点后该玩家就会结束游戏, 他不能等待一 段时间后再被观察员观察到。 即对于把结点作为终点的玩家: 若他在第秒重到达终点,则在结点的观察员不能观察到该玩家;若他正好在第秒到达终点,则在结点的观察员可以观察到这个玩家。

输入格式

输入格式:

第一行有两个整数 。其中代表树的结点数量, 同时也是观察员的数量, 代表玩家的数量。

接下来 行每行两个整数和 ,表示结点 到结点 有一条边。

接下来一行 个整数,其中第个整数为 , 表示结点出现观察员的时间。

接下来 行,每行两个整数,和,表示一个玩家的起点和终点。

对于所有的数据,保证 。

输出格式

输出1行 个整数,第个整数表示结点的观察员可以观察到多少人。

备注

输入输出样例

输入样例#1:

6 3
2 3
1 2 
1 4 
4 5 
4 6 
0 2 5 1 2 3 
1 5 
1 3 
2 6 

输出样例#1:

2 0 0 1 1 1 

输入样例#2:

5 3 
1 2 
2 3 
2 4 
1 5 
0 1 0 3 0 
3 1 
1 4
5 5 

输出样例#2:

1 2 1 0 1 

【样例1说明】

对于1号点,,故只有起点为1号点的玩家才会被观察到,所以玩家1和玩家2被观察到,共有2人被观察到。

对于2号点,没有玩家在第2秒时在此结点,共0人被观察到。

对于3号点,没有玩家在第5秒时在此结点,共0人被观察到。

对于4号点,玩家1被观察到,共1人被观察到。

对于5号点,玩家1被观察到,共1人被观察到。

对于6号点,玩家3被观察到,共1人被观察到。

【子任务】

每个测试点的数据规模及特点如下表所示。 提示: 数据范围的个位上的数字可以帮助判断是哪一种数据类型。

目前只做了20分左右的做法,即暴力搜索。

从这种做法中得到的启示:

1.如果想要返回上一步:void里用return;其他的用return xxx( , );

2.如果想要强制退出void,可以设置一个全局变量(本题是br,即break的缩写);当满足退出条件时,br=true,然后把 if(br) return; 放在函数的最上面,这样就会一层一层的退出了。

3.t++和t+1的区别:前者会改变t本身的值,后者只是在进一步的递归中使用新的t,而当前这步的t并不会因此改变

 1 #include <iostream>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cstdlib>
 6 #include <algorithm>
 7 using namespace std;
 8 int n,m;
 9 bool map[10101][10101],vis[101010],br;
10 int a[101010];
11 int ans[101010];
12 void dfs(int st,int ed,int t)
13 {
14      if(br) return ;  //全局变量br可以强制退出函数
15      if(vis[st]) return ; //返回上一步
16      //cout<<st<<" "<<t<<endl;
17      vis[st]=1;
18      if(st==ed)
19      {
20          //if(a[ed]==t) ans[ed]++;
21          br=true;
22      }
23      if(a[st]==t) ans[st]++;
24      for(int i=1;i<=n;i++)
25      {
26          if(map[st][i] && !vis[i])
27          {
28              dfs(i,ed,t+1);  //如果是++t,那么在退回的时候t就会比正常情况大1;而t+1没有改变当前的t
29          }
30      }
31 }
32
33 int main()
34 {
35     scanf("%d%d",&n,&m);
36     for(int i=1;i<n;i++)
37     {
38         int u,v;
39         scanf("%d%d",&u,&v);
40         map[u][v]=1;
41         map[v][u]=1;
42     }
43     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
44     for(int i=1;i<=m;i++)
45     {
46         memset(vis,0,sizeof(vis));
47         br=0;
48         int st,ed;
49         scanf("%d%d",&st,&ed);
50         dfs(st,ed,0);
51
52     }
53     for(int j=1;j<=n;j++) printf("%d ",ans[j]);
54     return 0;
55 }

2016--D1--2 1.0

时间: 2024-11-07 15:17:38

noip2016--D1--2的相关文章

然后又能让

http://quote.hexun.com/stock/icb.aspx?code=1&name=%A9%96%B0%B2%C7%EC%C8%FD%DF%F2%81%F6%C4%C4%C0%EF%D3%D0%C2%F4%A3%D1%3A%A3%B6%A3%B9%A3%B5%A3%B2%A3%B5%A3%B6%A3%B7%A3%B1%A3%B7 http://quote.hexun.com/stock/icb.aspx?code=1&name=%A1%E1%BB%B4%C4%CF%C8%F

听到发给你

http://quote.hexun.com/stock/icb.aspx?code=1&name=%A8%93%C7%B1%BD%AD%C4%C4%C0%EF%D3%D0%C2%F4%C7%E8%BB%AF%CE%EF%A3%D1%3A%A3%B2%A3%B0%A3%B8%A3%B6%A3%B0%A3%B6%A3%B7%A3%B5 http://quote.hexun.com/stock/icb.aspx?code=1&name=%A8L%C2%E9%B3%C7%C4%C4%C0%EF%

56好吗一盒

http://quote.hexun.com/stock/icb.aspx?code=1&name=%A8%93%C7%B1%BD%AD%C4%C4%C0%EF%D3%D0%C2%F4%C7%E8%BB%AF%CE%EF%A3%D1%3A%A3%B2%A3%B0%A3%B8%A3%B6%A3%B0%A3%B6%A3%B7%A3%B5 http://quote.hexun.com/stock/icb.aspx?code=1&name=%A8L%C2%E9%B3%C7%C4%C4%C0%EF%

[NOIP2016]换教室 D1 T3 Floyed+期望DP

[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课程同时在不同的地点进行, 其中, 牛牛预先被安排在教室 ci上课, 而另一节课程在教室 di进行. 在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程.如果学生想更换第i节课程的教室,则需要提出中情.若申请通过,学生

[NOIP2016]换教室 题解(奇怪的三种状态)

2558. [NOIP2016]换教室 [题目描述] 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1<i<n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室ci上课,而另一节课程在教室di进行. 在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程.如果学生想更换第i节课程的教室,则需要提出申请.若申请通过,学生就可以在第i个时间段去教室di

NOIP2016报零记

其实,NOIP2016已经于10天之前就结束了,但是由于种种原因,没有写总结. 现在就来填上这个坑吧. DAY1: T1:一道简(kun)单(nan)的模拟,虽然ac,但是考试的时候总觉得怪怪的.并且在学校的评测机上还T了.(TAT) 用字符数组的效率是通高的. T2:拿到题时一脸蒙B虽然知道是图论,但是依然不会写.仔细研究一下数据,原以为可以骗横多分,然而········ T3:像T2一样依然不会,因为题的BUG,拿了可观的分数. D1:这一天拿了联赛大部分分数. DAY2: T1:我靠( ‵

BZOJ 4720 [Noip2016]换教室

4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室ci上课,而另一节课程在教室di进行.在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程.如果学生想更换第i节课程的教室,则需要提出申请.若申请通过,学生就可以在第i个时间段去教室

【NOIP2016】愤怒的小鸟

P2257 - [NOIP2016]愤怒的小鸟 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如y = ax^2 + bx的曲线,其中a, b是Kiana指定的参数,且必须满足a<0. 当小鸟落回地面(即x轴)时,它就会瞬间消失. 在游戏的某个关卡里,平面的第一象限中有n只绿色的小猪,其中第i只小猪所在的坐标为(xi,yi). 如

天天爱跑步[NOIP2016]

时间限制:2 s   内存限制:512 MB [题目描述] 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一棵包含n个结点和n-1条边的树,每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从1到n的连续正整数. 现在有m个玩家,第i个玩家的起点为Si,终点为Ti.每天打卡任务开始时,所有玩家在第0秒同时从自己的起点出发,以每秒跑一条边的速度,不间断

[NOIP2016]愤怒的小鸟 D2 T3 状压DP

[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如y=ax2+bx的曲线,其中a,b是Kiana指定的参数,且必须满足a<0. 当小鸟落回地面(即x轴)时,它就会瞬间消失. 在游戏的某个关卡里,平面的第一象限中有n只绿色的小猪,其中第i只小猪所在的坐标为(xi,yi). 如果某只小鸟的飞行