제출 #158260

#제출 시각아이디문제언어결과실행 시간메모리
158260MohamedAhmed04Pipes (BOI13_pipes)C++14
74.07 / 100
176 ms22252 KiB
#include <bits/stdc++.h> using namespace std ; const int MAX = 1e5 + 10 ; vector< vector<int> >adj(MAX) ; int n , m ; int dep[MAX], P[MAX] , arr[MAX] ; vector< pair<int , int> >vp ; map< pair<int , int> , int>mp ; void dfs1(int node , int par , int lvl) { P[node] = par ; dep[node] = lvl ; for(auto &child : adj[node]) { if(child == par) continue ; dfs1(child , node , lvl+1) ; } return ; } void solve1() { dfs1(1 , -1 , 0) ; vector< vector<int> >v(n+1) ; for(int i = 1 ; i <= n ; ++i) v[dep[i]].push_back(i) ; for(int i = n ; i >= 1 ; --i) { for(auto &node : v[i]) { int a = min(node , P[node]) , b = max(node , P[node]) ; mp[{a , b}] = arr[node] ; arr[P[node]] -= arr[node] ; } } for(auto &i : vp) { int a = min(i.first , i.second) ; int b = max(i.first , i.second) ; cout<<mp[{a , b}] * 2<<"\n" ; } return ; } void solve2() { cout<<0<<"\n" ; return ; } int main() { ios_base::sync_with_stdio(0) ; cin.tie(0) ; cin>>n>>m ; if(m > n) return cout<<0<<"\n" , 0 ; for(int i = 1 ; i <= n ; ++i) cin>>arr[i] ; for(int i = 0 ; i < m ; ++i) { int x , y ; cin>>x>>y ; adj[x].push_back(y) ; adj[y].push_back(x) ; vp.push_back({x , y}) ; } if(m == n-1) solve1() ; else solve2() ; return 0 ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...