河南省第十届大学生程序设计竞赛
来源:互联网 发布:淘宝电子兑换券 编辑:程序博客网 时间:2024/05/16 15:54
题目描述
时间:2000ms 内存 128MB
抗日战争时期,在国共合作的大背景下,中共不断发展壮大,其情报工作也开始由获取警报性、保卫性信息,向获取军政战略性情报转变。各系统情报组织遵循”荫蔽精干,长期埋伏,积蓄力量,以待时机”的隐蔽战线工作方针,开展了卓有成效的情报工作。
*特科组是中共情报工作的一个杰出范例,它以点为主、系统延伸、分散辐射的力量格局,异地领导、分头派遣、单线联系的组织形式。以打入、拉出、统战联络、内线为主的工作方式,形成了一个传递信息隐蔽、效用及时、形式多样的情报网络。
*特科组的情报人员共有N人,其代号分别为0,1,……,N-1。 0号是最高领导人,特工之间有一套严格的单线联络程序,即,每个特工人员只有一个上线,他获得的情报需层层上传递到0号手里,由0号发报出去。
特工i在传递情报时,若通往到0号的通道尚未建立,则需要建立一级级单线通道;若他的上线已建立好通道,只需建立两人通道,信息发送给上线;依次类推。若特工i已建立好到0号的通道,则直接发出情报。日伪统治中心南京,既是情报来源丰富的地方,又是特工人员活动最危险的地方。因此,一旦某个特工处于不安全状态,他必须马上撤离,同时他的所有下线(处在通道上的一级级下线)也一同撤离。
已知*特科组的组织结构,你的任务是计算,当某特工i需要发送情报时,最少需要建立几个情报人员的通道;当某特工i处于不安全状态时,最少需要撤离多少人员。
输入
第一行一个整数: N ( 1≤N ≤5060 )
接下来一行有N-1 个整数, A1 A2 ……An-1 ,其中Ai是编号i的上线。
下一行一个整数: M 表示有M个状态,( 1≤M ≤5060 )
接下来有M行 :有两种形式: Send i 特工i处于要发送情报状态;
Danger i 特工i处于不安全状态
输出
输出占M行 ,对于Send i,输出最少需要建立通道的情报人员数,若特工i处于通道线上,输出0;对于Danger i,输出最少需要撤离多少人员,若特工i不处于通道线上,则输出0.
样例输入
10
0 1 2 1 3 0 0 3 2
10
Send 0
Send 3
Danger 2
Send 7
Send 5
Send 9
Danger 9
Send 4
Send 1
Send 9
样例输出
1
3
2
1
3
1
1
1
0
1
思路
选中一个节点之后DFS。
代码
#include <stdio.h>#include <iostream>#include <algorithm>#include <math.h>#include <cstring>#include <queue>#include <map>#include <vector>#include <string>#define mem(a) memset(a,0,sizeof(a))#define mem2(a) memset(a,-1,sizeof(a))#define mod 1000000007#define mx 100005using namespace std;int a[5100];int n,m;int head[5100],tail[5100];//因为图过于稀疏,数据范围又是5060*5060,所以用邻接表来存,省时间。int ans;bool vis[5100];void dfs1 (int x)//向上DFS,遇到已经连接的节点就break。{ if(!vis[x]) { vis[x]=true; ans++; } if(x==0) { return ; } dfs1(a[x]);}void dfs2 (int x)//向下DFS,一直搜到没有连接的节点位置。{ if(!vis[x]) return; if(vis[x]) { vis[x] = false; ans++; } int t=head[x]; while(t!=-1) { if(vis[t]) { ans++; vis[t]=false; dfs2(t); } t=tail[t]; }}int main(){#ifndef ONLINE_JUDGE freopen("1.txt","r",stdin);#endif // ONLINE_JUDGE ios_base::sync_with_stdio(false); cin.tie(0); char s[100]; int t; while(cin>>n) { mem2(head); mem(a); mem(vis); for(int i=1; i<n; ++i) { cin>>a[i]; tail[i] = head[a[i]]; head[a[i]] = i; } cin>>m; while(m--) { cin>>s>>t; if(strcmp(s,"Send")==0) { ans=0; dfs1(t); cout<<ans<<endl; } else { ans=0; dfs2(t); cout<<ans<<endl; } } } return 0;}
- 河南省第十届大学生程序设计竞赛
- 河南省第十届大学生程序设计竞赛 年终奖金
- 2017河南省第十届ACM大学生程序设计竞赛总结
- 河南省第十届ACM大学生程序设计竞赛总结
- 河南省第十届ACM大学生程序设计竞赛总结
- 河南省第十届ACM大学生程序设计竞赛总结
- upc 4189&&河南省第十届大学生程序设计竞赛 情报传递
- 河南省第十届大学生程序设计竞赛 情报传递
- 第五届河南省大学生程序设计竞赛 题解
- 河南省第九届大学生程序设计竞赛 题解
- NYIST—2017年第十届河南省大学生程序设计竞赛选拔赛—个人赛总结
- 河南省第十届大学生程序设计竞赛 A,B,C,D,F,G,H 题解
- 第十届河南省程序设计竞赛总结 !
- 河南省第十届ACM程序设计竞赛排行榜
- 第三届河南省大学生程序设计竞赛 房间安排
- 第三届河南省大学生程序设计竞赛 聪明的“KK”
- 第三届河南省大学生程序设计竞赛题型简要分析
- 第一届河南省大学生程序设计竞赛题型简要分析
- HDU 6000 贪心
- 欢迎使用CSDN-markdown编辑器
- ArcEngine中制图表达的相关接口
- 机器学习入门02-决策树
- A Simple Problem with Integers POJ
- 河南省第十届大学生程序设计竞赛
- Android EditText与系统软键盘
- Eclipse插件springsource-tool-suite的下载和安装
- Web系统大规模并发——电商秒杀与抢购
- Selenium之常见元素处理系列三--upFile(上传文件),应用JavaScript
- Timer类实现定时任务
- hdu 5875 Function
- SSR的搭建教程和SSR一键脚本,安装BBR,锐速脚本
- window上mysql绿色版安装