이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define sp << ' ' <<
#define nl << '\n'
const int LIM = 3e5+1;
int n, m, A, id[LIM], L[LIM], R[LIM], pre[LIM], st[LIM], stP, c;
vector<int> g[LIM], h[LIM];
array<int, 3> p[LIM];
bool vis[LIM];
void dfs0(int u){
vis[u] = 1;
for(int &v : g[u]) if(!vis[v]) dfs0(v);
st[stP++] = u;
}
void dfs1(int u){
id[u] = c + 1;
for(int &v : h[u]) if(!id[v]) dfs1(v);
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m >> A >> c;
fill(L, L+n+1, n+1);
for(int i=0; i<n; ++i){
auto &[x, y, j] = p[i];
cin >> x >> y;
j = i;
}
for(int i=0; i<m; ++i){
int u, v, w;
cin >> u >> v >> w; --u, --v;
while(w--){
g[u].push_back(v);
h[v].push_back(u);
swap(u, v);
}
}
for(int u=0; u<n; ++u) if(!vis[u] && !p[u][0]) dfs0(u);
sort(p, p+n, [&](auto &x, auto &y){
return x[1] < y[1];
});
for(int i=0; i<n; ++i){
auto &[x, y, j] = p[i];
if(x == A) L[j+1] = R[j+1] = i+1;
}
for(int i=stP; --i>=0; )
if(!id[st[i]]) dfs1(c = st[i]);
for(int i=0; i<stP; ++i){
int u = st[i];
L[id[u]] = min(L[id[u]], L[u+1]);
R[id[u]] = max(R[id[u]], R[u+1]);
for(int &v : g[u]){
L[id[u]] = min(L[id[u]], L[id[v]]);
R[id[u]] = max(R[id[u]], R[id[v]]);
}
}
for(int i=0; i<n; ++i)
pre[i+1] = pre[i] + (vis[p[i][2]] && p[i][0] == A);
for(int i=n; --i>=0; ){
int j = id[p[i][2]];
if(!p[i][0])
cout << (R[j] ? pre[R[j]] - pre[L[j]-1] : 0) nl;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |