#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< pair<int, int> > r;
pair<int, 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];
ret = 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({py, 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 < n; i++) {
dp[i] = {1e9, -1e9};
kol[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]]);
}
}
sort(r.begin(), r.end());
kol[comp[r[0].Y]] = {0, 0};
int novi = 1;
for (int i = 1; i < r.size(); i++) {
if (comp[r[i-1].Y] == comp[r[i].Y]) {
kol[comp[r[i].Y]].Y = novi;
novi++;
}
else {
kol[comp[r[i].Y]] = {novi, novi};
novi++;
}
}
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:53:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
53 | for (int i = 0; i < e[x].size(); i++) {
| ~~^~~~~~~~~~~~~
tra.cpp: In function 'int main()':
tra.cpp:110:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
110 | for (int j = 0; j < v[i].size(); j++) {
| ~~^~~~~~~~~~~~~
tra.cpp:118:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
118 | for (int i = 1; i < r.size(); i++) {
| ~~^~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
11 ms |
22612 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
22564 KB |
Output is correct |
2 |
Incorrect |
12 ms |
22584 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
12 ms |
22612 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
13 ms |
22868 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
24 ms |
24296 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
49 ms |
26204 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
92 ms |
29800 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
151 ms |
30912 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
231 ms |
36128 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
353 ms |
44592 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
777 ms |
53420 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
212 ms |
37592 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |