fork download
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<stack>
  4. using namespace std;
  5.  
  6. int n,m,a[100],x[100][100],p,q,v,w,y[100],r;
  7. stack<int>S;
  8.  
  9. void dfs(){
  10. for(int i=1;i<=n;i++){
  11. if(y[i]==0){
  12. if(S.size()>=1){
  13. if(x[S.top()][i]==0){goto E;}
  14. }
  15. S.push(i);
  16. y[S.top()]=1;
  17. v+=a[S.top()];
  18. w=max(v,w);
  19. r++;
  20. dfs();
  21. }
  22. E:;
  23. }
  24. if(S.size()>=1){
  25. v-=a[S.top()];
  26. y[S.top()]=0;
  27. S.pop();
  28. r--;
  29. }
  30. return;
  31. }
  32.  
  33. int main(){
  34. cin>>n>>m;
  35. for(int i=1;i<=n;i++){
  36. cin>>a[i];
  37. }
  38. for(int i=1;i<=m;i++){
  39. cin>>p>>q;
  40. x[p][q]=1;
  41. x[q][p]=1;
  42. }
  43. dfs();
  44. cout<<w<<endl;
  45. return 0;
  46. }
Success #stdin #stdout 0s 3504KB
stdin
6 6
1
2
3
4
5
7
1 2
1 3
1 6
2 4
3 4
4 5
stdout
20