Submission #120938

#TimeUsernameProblemLanguageResultExecution timeMemory
120938thiago4532Pipes (BOI13_pipes)C++17
35 / 100
272 ms25344 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; const int maxn = 1e5 + 10; const int maxm = 5e5 + 10; vector<int> grafo[maxn]; int n; int s[maxn]; map<pair<int, int>, int> mapa; int val[maxn], ans[maxn]; namespace tree{ int nivel[maxn], pai[maxn], soma[maxn]; void dfs(int u, int p = 0) { pai[u] = p; for(auto v : grafo[u]) { if(v == p) continue; nivel[v] = nivel[u] + 1; dfs(v, u); } } }; int main() { int m; cin >> n >> m; if(m > n) { cout << "0\n"; return 0; } int total = 0; for(int i=1;i<=n;i++) cin >> s[i], s[i] *= 2, total += s[i]; for(int i=1;i<=m;i++) { int a, b; cin >> a >> b; grafo[a].push_back(b); grafo[a].push_back(b); mapa[{a, b}] = i; mapa[{b, a}] = i; } if(n - 1 == m) { tree::dfs(1); vector<pii> arr; for(int i=1;i<=n;i++) arr.push_back({tree::nivel[i], i}); sort(arr.begin(), arr.end(), greater<pii>()); for(auto e : arr) { int v = e.second, u = tree::pai[v]; tree::soma[u] += (s[v] - tree::soma[v]); ans[mapa[{u, v}]] = (s[v] - tree::soma[v]); } for(int i=1;i<=m;i++) cout << ans[i] << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...