bitmasks brute force divide and conquer graphs *2800

Please click on ads to support us..

C++ Code:

# include <cstdio>
# include <algorithm>
# include <cmath>
# include <iostream>
# include <cstring>
# include <vector>
# include <queue>
using namespace std;
const int MAXN = 1e3 + 10, MAXM = 2e5 + 10;
int e[MAXM][2], f[MAXN][MAXN], n, m, q;
bool ans[MAXM];
struct query {
	int l, r, s, t, id;
}que[MAXM];
bool cmp(query A, query B) {
	return A.r < B.r;
}
void SOLVE() {
	cin >> n >> m >> q;
	for (int i = 1; i <= m; i++) {
		cin >> e[i][0] >> e[i][1];
	}
	for (int i = 1; i <= q; i++) {
		cin >> que[i].l >> que[i].r >> que[i].s >> que[i].t;
		que[i].id = i;
	}
	sort(que + 1, que + q + 1, cmp);
	int t = 1;
	for (int i = 1; i <= m; i++) {
		int u = e[i][0], v = e[i][1];
		f[u][u] = f[v][v] = i;
		for (int j = 1; j <= n; j++) f[j][u] = f[j][v] = max(f[j][u], f[j][v]);
		while (t <= q && que[t].r <= i) {
			ans[que[t].id] = f[que[t].s][que[t].t] >= que[t].l;
			t++;
		}
	}
	for (int i = 1; i <= q; i++) {
		cout << (ans[i] ? "Yes" : "No") << "\n" ;
	}
}

int main() {
	//freopen("1.in", "r", stdin);
	ios::sync_with_stdio(false);
	cin.tie(0);
	long long T = 1;
	while (T--) SOLVE();
	return 0;
}


Comments

Submit
0 Comments
More Questions

1657B - XY Sequence
1009A - Game Shopping
1657A - Integer Moves
230B - T-primes
630A - Again Twenty Five
1234D - Distinct Characters Queries
1183A - Nearest Interesting Number
1009E - Intercity Travelling
1637B - MEX and Array
224A - Parallelepiped
964A - Splits
1615A - Closing The Gap
4C - Registration System
1321A - Contest for Robots
1451A - Subtract or Divide
1B - Spreadsheet
1177A - Digits Sequence (Easy Edition)
1579A - Casimir's String Solitaire
287B - Pipeline
510A - Fox And Snake
1520B - Ordinary Numbers
1624A - Plus One on the Subset
350A - TL
1487A - Arena
1520D - Same Differences
376A - Lever
1305A - Kuroni and the Gifts
1609A - Divide and Multiply
149B - Martian Clock
205A - Little Elephant and Rozdil