Submission #125137

#TimeUsernameProblemLanguageResultExecution timeMemory
125137thiago4532Pipes (BOI13_pipes)C++17
74.07 / 100
408 ms23740 KiB
#include <bits/stdc++.h> #define int int64_t using namespace std; const int maxn = 1e5 + 10; bool mark[maxn]; int ans[5*maxn], s[maxn], grau[maxn]; map<pair<int, int>, int> mapa; int n; vector<int> grafo[maxn]; int32_t 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[b].push_back(a); mapa[{a, b}] = i; mapa[{b, a}] = i; grau[a]++; grau[b]++; } queue<int> fila; for(int i=1;i<=n;i++) { if(grau[i] == 1) fila.push(i); } while(!fila.empty()) { int u = fila.front(); fila.pop(); if(mark[u]) continue; mark[u] = true; // cout << u << ": " << s[u] << "\n"; for(auto v : grafo[u]) { if(mark[v]) continue; grau[v]--; ans[mapa[{u, v}]] = s[u], s[v] -= s[u]; if(grau[v] == 1) fila.push(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...