Submission #1143559

#TimeUsernameProblemLanguageResultExecution timeMemory
1143559Rainmaker2627Pipes (BOI13_pipes)C++20
100 / 100
40 ms12476 KiB
#include<bits/stdc++.h> using namespace std; #define int long long signed main() { cin.tie(0)->sync_with_stdio(false); int n, m; cin >> n >> m; if (n<m) cout << 0 << '\n'; else { vector<int> c(n+1); for (int i = 1; i <= n; i++) { cin >> c[i]; } vector<int> deg(n+1, 0); vector<vector<pair<int, int>>> adj(n+1, vector<pair<int, int>>()); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; adj[u].push_back({v, i}); adj[v].push_back({u, i}); deg[u]++; deg[v]++; } queue<int> top; vector<int> ans(m); for (int i = 1; i <= n; i++) if (deg[i]==1) top.push(i); while (!top.empty()) { auto u=top.front(); top.pop(); if (deg[u]==-1) continue; for (auto [v, i] : adj[u]) { if (deg[v]<0) continue; if (--deg[v]==1) top.push(v); ans[i]=c[u]; c[v]-=c[u]; } n--; deg[u]=-1; } if (n%2==0 & n!=0) cout << 0 << '\n'; else { if (n) { int s=0; for (int i = 1; i <= n && !s; i++){ if (deg[i]>0) s=i; } int u=s, p=0, tl=0, ev=0; vector<pair<int, int>> ord; while (n) { deg[u]=-1; for (auto [v, i] : adj[u]) { if (deg[v]<0) continue; ord.push_back({u, i}); u=v; n--; p=!p; if (!p) ev+=c[v]; tl+=c[v]; break; } if (n==1) { deg[s]=1; } } n=ord.size(); ans[ord[0].second]=tl/2-ev; for (int i = 1; i < n; i++) { ans[ord[i].second]=c[ord[i].first]-ans[ord[i-1].second]; } } for (int i = 0; i < m; i++) { cout << 2*ans[i] << '\n'; } } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...