【Codeforces Round #445 (Div. 2) C】 Petya and Catacombs

【链接】 我是链接,点我呀:)
【题意】

在这里输入题意

【题解】

看看时间戳为i的点有哪些。 每次优先用已经访问过的点。 如果不行就新创一个点。 注意新创点的时间戳也是i.

【代码】

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5;

int n;
int now = 1, tot = 1;
vector <int> have[N + 10];
int before[N + 10];


int main() {
	//freopen("F:\\c++source\\rush_in.txt", "r", stdin);
	int n;
	scanf("%d", &n);
	int x;
	scanf("%d", &x);
	have[1].push_back(tot);
	before[tot] = 1;

	for (int i = 2; i <= n; i++) {
		scanf("%d", &x);
		if (!have[x].empty()) {
			now = have[x].back();
			have[x].pop_back();
			before[now] = i;
			have[i].push_back(now);
		}
		else {
			tot++;
			have[i].push_back(tot);
			before[tot] = i;
		}
	}
	printf("%d\n", tot);

	return 0;
}
posted @ 2017-11-14 07:10  AWCXV  阅读(178)  评论(0编辑  收藏  举报