L2-040 哲哲打游戏 - 团体程序设计天梯赛-练习集 (pintia.cn)
被坑惨了(其实是我没看清题)。我以为题目中说的 输出哲哲最后到达的剧情点编号 指的是最大剧情编号/最大深度。但是其实就是当前的剧情点curpos。
一定要好好读题!
AC代码和详细解析如下:
#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5 + 3;
int n, m; //剧情点 操作个数
vector<int>g[N]; //g[i]=j 表示i号剧情点能去往j g[i]={2,3,6} 表示i号剧情点能去的地方有 2 3 6
vector<int>savePos(102); //存档的位置 savePos[3]=2 表示:3号档位存了2号剧情点
vector<int>historySave; //历史存档记录
//int maxPos=0; //最大位置 注意!不一定是最大的pos是最大进程,而是最深的那个
//不需要这个maxPos,被害惨了,只需要知道当前进程即可 也就是curPos
int main()
{
cin >> n >> m;
int cango, k;
for (int i = 1; i <= n; i++) //存图
{
g[i].push_back(0); //空节点,因为我们要从1开始,所以把0号位占了
cin >> k;
while (k--)
{
cin >> cango;
g[i].push_back(cango);
}
}
int op, pos; //操作 存档位置or下一个剧情点
int curpos=1; //当前剧情点
while (m--) //操作
{
cin >> op >> pos;
if (op == 0) //进程
curpos = g[curpos][pos]; //当前剧情点连接的的第pos个剧情 因为我用的push,从0开始的,所以要-1
else if (op == 1) //存档
{
savePos[pos] = curpos;
historySave.push_back(curpos);
}
else //op=2 读档
curpos = savePos[pos];
}
for (auto it : historySave)
cout << it << endl;
cout << curpos;
return 0;
}