Advertisement
Guest User

Untitled

a guest
Dec 10th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. void dfs(int x, int parent, vector < vector <int> > &vertex, vector <long long> &police, vector <long long> &with,vector <long long> &out)
  5. {
  6. long long N = 0, MinN = police[x];
  7. for(int i=0; i<vertex[x].size(); i++)
  8. {
  9. if(vertex[x][i]!=parent)
  10. {
  11. dfs(vertex[x][i],x,vertex,police,with,out);
  12. N += with[vertex[x][i]];
  13. MinN += min(with[vertex[x][i]],out[vertex[x][i]]);
  14. }
  15. }
  16. with[x] = MinN;
  17. out[x] = N;
  18. // cout<<"DFS!!!"<<x<<" ";
  19. // cout<<MinN<<" "<<N<<endl;
  20. }
  21.  
  22. void dfs_no2(int x,int parent,vector < vector <int> > &vertex, vector <bool> &place_police, vector <long long> &with,vector <long long> &out)
  23. {
  24. if(!place_police[x])
  25. {
  26. if(with[x]<=out[x])
  27. {
  28. place_police[x] = true;
  29. }
  30. else
  31. {
  32. for(int i=0; i<vertex[x].size(); i++)
  33. {
  34. place_police[vertex[x][i]] = true;
  35. }
  36. }
  37. }
  38. for(int i=0; i<vertex[x].size(); i++)
  39. {
  40. if(vertex[x][i]!=parent)
  41. {
  42. dfs_no2(vertex[x][i],x,vertex,place_police,with,out);
  43. }
  44. }
  45. }
  46. int main()
  47. {
  48. int Z;
  49. cin>>Z;
  50. while(Z--)
  51. {
  52. int N;
  53. cin>>N;
  54. vector <long long> police;
  55. vector<long long> with(N,0);
  56. vector<long long>out(N,0);
  57. for(int i=0; i<N; i++)
  58. {
  59. int x;
  60. cin>>x;
  61. police.push_back(x);
  62. }
  63. vector < vector <int> > vertex(N,vector<int>());
  64. vector <bool> place_police(N,false);
  65. for(int i=0; i<N-1; i++)
  66. {
  67. int x1,y1;
  68. cin>>x1>>y1;
  69. x1--;
  70. y1--;
  71. vertex[x1].push_back(y1);
  72. vertex[y1].push_back(x1);
  73. }
  74. dfs(0,-1,vertex,police,with,out);
  75. // for(int i=0;i<N;i++)
  76. // {
  77. // cout<<i<<"with: "<<with[i]<<"out: "<<out[i]<<endl;
  78. // }
  79. long long mini = min(with[0],out[0]);
  80. cout<<mini<<endl;
  81. dfs_no2(0,-1,vertex,place_police,with,out);
  82. for(int i=0;i<place_police.size();i++)
  83. {
  84. cout<<place_police[i];
  85. }
  86. cout<<endl;
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement