I
来源:互联网 发布:中老年交友软件 编辑:程序博客网 时间:2024/05/17 07:38
题意:
给出每个火车的入境时间,现在有如干个开关,以及每个火车需要达到的处境口编号,询问开关的切换时间,以及切换编号
思路:
对于每个火车,前面的火车与后面的火车永远不会相撞(只要让前面的火车一直运动下去)。因此每个节点当前只需要处理当前的火车即可
记录节点的状态 (0,1 表示左侧还是右侧开关状态)
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include <map>#include <queue>using namespace std;typedef long long ll;vector<int>vec[5005];int place[5005];int has[3000];int num[3000];int cnt=0;void dfs(int u){ if(vec[u].size()>0) { int v=vec[u][0]; dfs(v); } num[u]=++cnt; if(vec[u].size()>1) { int v=vec[u][1]; dfs(v); }}int ans=0;struct node{ int ti,pl; bool friend operator <(node x, node y) { return x.ti<y.ti; }} anstmp[50000];int op[50000];void solve(int u,int aim,int t){ if(aim==num[u]) return ; int v; if(aim>num[u]) { if(op[u]==0) { ans++; anstmp[ans].ti=t; anstmp[ans].pl=u; op[u]=1; } v=vec[u][1]; solve(v,aim,t+1); } else { if(op[u]==1) { ans++; anstmp[ans].ti=t; anstmp[ans].pl=u; op[u]=0; } v=vec[u][0]; solve(v ,aim,t+1); }}struct nodex{ char k; int t; friend bool operator <(nodex x,nodex y) { return x.t<y.t; }} car[50000];int main(){ freopen("instruction.in","r",stdin); freopen("instruction.out","w",stdout); int n; scanf("%d",&n); for(int i=1; i<=n; i++) { char s[5]; scanf("%s",s); place[i]=(s[0]=='s'?0:1); if(s[0]=='s') { int v; scanf("%d",&v); vec[v].push_back(i); } else { int u; scanf("%d",&u); scanf("%s",s); vec[u].push_back(i); has[s[0]-'a']=i; } } int m; dfs(0); scanf("%d",&m); for(int i=1; i<=m; i++) { scanf("%d",&car[i].t); char kk[5]; scanf("%s",kk); car[i].k=kk[0]; } sort(car+1,car+1+m); for(int i=1; i<=m; i++) { int aim=car[i].k-'a'; aim=has[aim]; solve(0,num[aim],car[i].t); } sort(anstmp+1,anstmp+1+ans); printf("%d\n",ans); for(int i=1; i<=ans; i++) { printf("%d %d\n",anstmp[i].pl,anstmp[i].ti); }}
阅读全文
0 0
- I
- I
- ++i
- I
- I
- i
- ++i
- i++
- (++i) + (++i) + (++i) + (++i)
- i++
- i
- i
- I++,I--,++I,--I
- I
- i++
- i++
- I
- ++i,--i,i++,i--
- SpringDao
- java获取响应网页源代码
- CGLIB(Code Generation Library)详解
- 数据流图
- <学习笔记>关于图的理论知识
- I
- 机器学习-学习笔记 学习总结归纳(第十三周)
- svd分解
- 学英语什么时候要看字幕?
- 9.四种转换类型
- Spring基于xml的方式开发我们的aop程序
- javaweb面试题续
- spring加载bean的过程
- banner轮播的简单实现