fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #include <stdlib.h>
  5. #define MAX 100000
  6. long long int k[MAX][200];
  7.  
  8. int visited[MAX];
  9. int main() {
  10. long long int N,K,u,w[MAX],v,sum,j,i;
  11. scanf("%lld%lld",&N,&K);
  12. i=1;
  13. while(i<=N)
  14. {
  15. scanf("%lld",&w[i]);
  16. i++;
  17. }
  18. i=0;
  19. sum = 0;
  20. i=0;
  21. while(i<N)
  22. {
  23. if(i!=0)
  24. {
  25. scanf("%lld%lld",&u,&v);
  26. //if(visited[u] == 0 && visited[v] == 0)
  27. sum = w[u] + w[v];
  28. //else if(visited[u] != 0 && visited[v] == 0)
  29. //sum = w[v];
  30. //else
  31. //sum = w[u];
  32.  
  33. visited[u] =1;
  34. visited[v] =1;
  35. }
  36. for(j=0;j<=K;j++)
  37. {
  38. if(i==0||j==0)
  39. k[i][j] = 0;
  40. else
  41. {
  42. if((sum + k[i-1][j]) > k[i-1][j])
  43. k[i][j] = sum + k[i-1][j];
  44. /*else if((w[u] + k[i-1][j]) > k[i-1][j])
  45.   k[i][j] = w[u] + k[i-1][j];
  46.   else if((w[v] + k[i-1][j]) > k[i-1][j])
  47.   k[i][j] = w[v] + k[i-1][j];*/
  48. else
  49. k[i][j] = k[i-1][j];
  50. }
  51. }
  52. i++;
  53. }
  54. /*for(i=0;i<N;i++)
  55.   {
  56.   for(j=0;j<=K;j++)
  57.   {
  58.   printf("%d ",k[i][j]);
  59.   }
  60.   printf("\n");
  61.   }*/
  62. printf("%lld\n",k[N-1][K]);
  63. return 0;
  64. }
  65.  
Success #stdin #stdout 0s 159360KB
stdin
5 2
1 1 -1 -1 -1
1 2
2 3
4 1
4 5
stdout
2