Submission #651190

# Submission time Handle Problem Language Result Execution time Memory
651190 2022-10-17T22:52:19 Z Markomafko972 Traffic (CEOI11_tra) C++14
16 / 100
834 ms 60292 KB
#include <bits/stdc++.h>
#define X first
#define Y second
#define pb push_back
#define pii pair<int, int>
typedef long long ll;
using namespace std;

const int MOD = 1e9 + 7;
const ll INF = 1e18;
const int OFF = (1 << 20);

int n, m, a, b, px, py, poc, kr, ty;
vector<int> v[300005];
vector<int> vr[300005];
int bio[300005];
stack<int> st;
int tren;
int comp[300005];
vector<int> e[300005];
vector< pair<int, int> > l;
vector<int> r;
int kol[300005];
pair<int, int> dp[300005];
int z;

void dfs(int x) {
	bio[x] = 1;
	
	for (int i = 0; i < v[x].size(); i++) {
		if (bio[v[x][i]] == 0) {
			dfs(v[x][i]);
		}
	}
	
	st.push(x);
}

void dfsr(int x) {
	comp[x] = tren;
	
	for (int i = 0; i < vr[x].size(); i++) {
		if (comp[vr[x][i]] == -1) dfsr(vr[x][i]);
	}
}

pair<int, int> rek(int x) {
	if (dp[x] != make_pair((int)1e9, (int)-1e9)) return dp[x];
	
	pair<int, int> &ret = dp[x];
	if (kol[x] > 0) {
		ret.X = z;
		ret.Y = z+kol[x]-1;
		z += kol[x];
	}
	
	for (int i = 0; i < e[x].size(); i++) {
		pair<int, int> sus = rek(e[x][i]);
		ret.X = min(ret.X, sus.X);
		ret.Y = max(ret.Y, sus.Y);
	}
	
	return ret;
}

int main () {

	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	cin >> n >> m >> a >> b;
	for (int i = 0; i < n; i++) {
		cin >> px >> py;
		if (px == 0) l.push_back({py, i});
		if (px == a) r.push_back(i);
	}
	
	for (int i = 0; i < m; i++) {
		cin >> poc >> kr >> ty;
		poc--;
		kr--;
		if (ty == 1) {
			v[poc].push_back(kr);
			vr[kr].push_back(poc);
		}
		else {
			v[poc].push_back(kr);
			v[kr].push_back(poc);
			vr[poc].push_back(kr);
			vr[kr].push_back(poc);
		}
	}
	
	for (int i = 0; i < n; i++) {
		if (bio[i] == 0) {
			dfs(i);
		}
	}
	
	memset(comp, -1, sizeof comp);
	while (st.size() > 0) {
		if (comp[st.top()] != -1) {
			st.pop();
			continue;
		}
		dfsr(st.top());
		st.pop();
		tren++;
	}
	
	for (int i = 0; i < r.size(); i++) {
		kol[comp[r[i]]]++;
	}
	
	for (int i = 0; i < n; i++) {
		dp[i] = {1e9, -1e9};
		for (int j = 0; j < v[i].size(); j++) {
			if (comp[i] != comp[v[i][j]]) e[comp[i]].push_back(comp[v[i][j]]);
		}
	}
	
	/*for (int i = 0; i < tren; i++) {
		cout << i << ": ";
		for (int j = 0; j < e[i].size(); j++) {
			cout << e[i][j] << " ";
		}
		cout << endl;
	}*/
	
	sort(l.begin(), l.end());
	for (int i = (int)l.size()-1; i >= 0; i--) {
		pair<int, int> rj = rek(comp[l[i].Y]);
		if (rj == make_pair((int)1e9, (int)-1e9)) cout << 0 << endl;
		else cout << rj.Y-rj.X+1 << endl;
	}

	return 0;
}

Compilation message

tra.cpp: In function 'void dfs(int)':
tra.cpp:30:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |  for (int i = 0; i < v[x].size(); i++) {
      |                  ~~^~~~~~~~~~~~~
tra.cpp: In function 'void dfsr(int)':
tra.cpp:42:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |  for (int i = 0; i < vr[x].size(); i++) {
      |                  ~~^~~~~~~~~~~~~~
tra.cpp: In function 'std::pair<int, int> rek(int)':
tra.cpp:57:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |  for (int i = 0; i < e[x].size(); i++) {
      |                  ~~^~~~~~~~~~~~~
tra.cpp: In function 'int main()':
tra.cpp:111:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  111 |  for (int i = 0; i < r.size(); i++) {
      |                  ~~^~~~~~~~~~
tra.cpp:117:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  117 |   for (int j = 0; j < v[i].size(); j++) {
      |                   ~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 14 ms 22612 KB Output is correct
2 Correct 14 ms 22640 KB Output is correct
3 Correct 13 ms 22612 KB Output is correct
4 Correct 13 ms 22552 KB Output is correct
5 Correct 13 ms 22552 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 22612 KB Output is correct
2 Correct 12 ms 22644 KB Output is correct
3 Correct 12 ms 22620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 22740 KB Output is correct
2 Incorrect 14 ms 22612 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 14 ms 22776 KB Output is correct
2 Incorrect 17 ms 23208 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 24 ms 24400 KB Output is correct
2 Incorrect 95 ms 28868 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 53 ms 27088 KB Output is correct
2 Incorrect 99 ms 30172 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 124 ms 31548 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 151 ms 33624 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 273 ms 40824 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 405 ms 49880 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 834 ms 56800 KB Output is correct
2 Incorrect 610 ms 60292 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 218 ms 42868 KB Output isn't correct
2 Halted 0 ms 0 KB -