제출 #1271425

#제출 시각아이디문제언어결과실행 시간메모리
1271425kaiboy철도 요금 (JOI16_ho_t3)C++20
100 / 100
67 ms11588 KiB
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

const int N = 100000;
const int M = 200000;

int ij[M], tt[M], dd[N], tt_[N], qu[N], kk[M];
vector<int> eh[N];

int main() {
	ios_base::sync_with_stdio(false), cin.tie(NULL);
	int n, m, q; cin >> n >> m >> q;
	for (int h = 0; h < m; h++) {
		int i, j; cin >> i >> j, i--, j--;
		ij[h] = i ^ j, tt[h] = q;
		eh[i].push_back(h);
		eh[j].push_back(h);
	}
	for (int t = 0; t < q; t++) {
		int h; cin >> h, h--;
		tt[h] = t;
	}
	for (int i = 0; i < n; i++)
		dd[i] = n;
	int cnt = 1; dd[0] = 0, tt_[0] = q;
	for (int head = 0; head < cnt; head++) {
		int i = qu[head], d = dd[i], t = tt_[i];
		if (t < q)
			kk[t]++;
		for (int h : eh[i]) {
			int j = i ^ ij[h];
			if (dd[j] == n)
				dd[qu[cnt++] = j] = d + 1;
			if (d < dd[j])
				tt_[j] = max(tt_[j], min(t, tt[h]));
		}
	}
	for (int k = 0, t = 0; t < q; t++)
		cout << (k += kk[t]) << '\n';
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...