Submission #322559

#TimeUsernameProblemLanguageResultExecution timeMemory
322559NachoLibreBitaro’s Party (JOI18_bitaro)C++14
100 / 100
1815 ms416572 KiB
#include <bits/stdc++.h>
using namespace std;

const int B = 301, N = 100005, M = 200005, Q = N, S = N;
int n, m, q, x, y, c[S], dpn[N];
bool dk[N], gb[N];
vector<int> v[N][2];
vector<pair<int, int> > dp[N];

void G(vector<pair<int, int> > &a, vector<pair<int, int> > b) {
	vector<pair<int, int> > c = a;
	int bp = 0, cp = 0;
	a.clear();
	while((bp < b.size() || cp < c.size()) && a.size() < B) {
		if(bp == b.size()) {
			if(!gb[c[cp].second]) a.push_back(c[cp]);
			gb[c[cp].second] = 1;
			++cp;
		} else if(cp == c.size()) {
			if(!gb[b[bp].second]) a.push_back({b[bp].first + 1, b[bp].second});
			gb[b[bp].second] = 1;
			++bp;
		} else if(b[bp].first + 1 < c[cp].first) {
			if(!gb[c[cp].second]) a.push_back(c[cp]);
			gb[c[cp].second] = 1;
			++cp;
		} else {
			if(!gb[b[bp].second]) a.push_back({b[bp].first + 1, b[bp].second});
			gb[b[bp].second] = 1;
			++bp;
		}
	}
	for(int i = 0; i < a.size(); ++i) {
		gb[a[i].second] = 0;
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m >> q;
	for(int i = 1; i <= m; ++i) {
		cin >> x >> y;
		v[x][1].push_back(y);
		v[y][0].push_back(x);
	}
	for(int i = 1; i <= n; ++i) {
		dp[i].push_back({0, i});
		for(int j = 0; j < v[i][0].size(); ++j) {
			G(dp[i], dp[v[i][0][j]]);
		}
		// for(int j = 0; j < dp[i].size(); ++j) {
		// 	cout << "[] " << dp[i][j].first << " " << dp[i][j].second << "\n";
		// }
		// cout << "\n";
	}
	for(int qi = 1; qi <= q; ++qi) {
		cin >> x >> y;
		for(int i = 0; i < y; ++i) {
			cin >> c[i];
			dk[c[i]] = 1;
		}
		if(y < B) {
			int ap = -1;
			for(int i = 0; i < dp[x].size(); ++i) {
				if(!dk[dp[x][i].second]) {
					ap = dp[x][i].first;
					break;
				}
			}
			cout << ap << "\n";
		} else {
			for(int i = 1; i <= x; ++i) {
				dpn[i] = 0;
				for(int j = 0; j < v[i][0].size(); ++j) {
					dpn[i] = max(dpn[i], dpn[v[i][0][j]] + 1);
				}
				if(!dpn[i] && dk[i]) dpn[i] = -1;
			}
			cout << dpn[x] << "\n";
		}
		for(int i = 0; i < y; ++i) {
			dk[c[i]] = 0;
		}
	}
	return 0;
}

Compilation message (stderr)

bitaro.cpp: In function 'void G(std::vector<std::pair<int, int> >&, std::vector<std::pair<int, int> >)':
bitaro.cpp:14:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |  while((bp < b.size() || cp < c.size()) && a.size() < B) {
      |         ~~~^~~~~~~~~~
bitaro.cpp:14:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |  while((bp < b.size() || cp < c.size()) && a.size() < B) {
      |                          ~~~^~~~~~~~~~
bitaro.cpp:15:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |   if(bp == b.size()) {
      |      ~~~^~~~~~~~~~~
bitaro.cpp:19:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |   } else if(cp == c.size()) {
      |             ~~~^~~~~~~~~~~
bitaro.cpp:33:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |  for(int i = 0; i < a.size(); ++i) {
      |                 ~~^~~~~~~~~~
bitaro.cpp: In function 'int main()':
bitaro.cpp:49:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |   for(int j = 0; j < v[i][0].size(); ++j) {
      |                  ~~^~~~~~~~~~~~~~~~
bitaro.cpp:65:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |    for(int i = 0; i < dp[x].size(); ++i) {
      |                   ~~^~~~~~~~~~~~~~
bitaro.cpp:75:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |     for(int j = 0; j < v[i][0].size(); ++j) {
      |                    ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...