제출 #673309

#제출 시각아이디문제언어결과실행 시간메모리
673309haxormanTraffic (CEOI11_tra)C++14
8 / 100
1044 ms84752 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...