이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int mxN = 3e5 + 7;
int n, m, A, B, vis[mxN], vis_cnt = 1, dp[mxN], east[mxN];
bool used[mxN];
vector<pair<int,int>> west;
vector<int> graph[mxN], rev[mxN], scc[mxN], order, cmp;
void dfs1(int u) {
vis[u] = vis_cnt;
for (auto v : graph[u]) {
if (vis[v] != vis_cnt) {
dfs1(v);
}
}
order.push_back(u);
}
void dfs2(int u) {
vis[u] = vis_cnt;
cmp.push_back(u);
for (auto v : rev[u]) {
if (vis[v] != vis_cnt) {
dfs2(v);
}
}
}
int dfs(int u) {
if (vis[u] == vis_cnt) {
return 0;
}
if (dp[u] != -1) {
return dp[u];
}
vis[u] = vis_cnt;
dp[u] = east[u];
for (auto v : scc[u]) {
dp[u] += dfs(v);
}
return dp[u];
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m >> A >> B;
map<pair<int,int>,int> pos;
for (int i = 1; i <= n; ++i) {
int x, y;
cin >> x >> y;
pos[{x, y}] = i;
if (!x) {
west.push_back({x, y});
}
else if (x == A) {
east[i] = 1;
}
}
for (int i = 0; i < m; ++i) {
int u, v, d;
cin >> u >> v >> d;
graph[u].push_back(v);
rev[v].push_back(u);
if (d == 2) {
graph[v].push_back(v);
rev[u].push_back(v);
}
}
for (int i = 1; i <= n; ++i) {
if (vis[i] != vis_cnt) {
dfs1(i);
}
}
++vis_cnt;
reverse(order.begin(), order.end());
vector<int> p(n + 1), roots;
for (auto u : order) {
if (vis[u] != vis_cnt) {
dfs2(u);
int root = cmp.back();
p[root] = root;
for (auto v : cmp) {
p[v] = root;
}
roots.push_back(root);
cmp.clear();
}
}
++vis_cnt;
for (int u = 1; u <= n; ++u) {
if (p[u] != u) {
east[p[u]] += east[u];
}
for (auto v : graph[u]) {
if (p[u] != p[v]) {
scc[p[u]].push_back(p[v]);
}
}
}
memset(dp, -1, sizeof(dp));
sort(west.begin(), west.end(), greater<pair<int,int>>());
for (auto x : west) {
int res = dfs(p[pos[x]]);
cout << res << "\n";
++vis_cnt;
}
}
# | 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... |