Guest User

Untitled

a guest
Jul 21st, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. /*
  2. * Leonardo Deliyannis Constantin
  3. * URI 2225 - Penalização // wrong answer
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <vector>
  8. #include <algorithm>
  9. using namespace std;
  10. #define MAX 16
  11. #define INF 0x3f3f3f3f
  12.  
  13. typedef vector<int> vi;
  14. typedef vector<vi> vvi;
  15.  
  16. int N;
  17. vector<vi> dist;
  18. vector<vvi> memo;
  19.  
  20. int tsp(int u, int mask, int wps){
  21. if(mask == (1 << N)-1)
  22. return (wps > 0) ? 0 : dist[u][0];
  23. if(memo[u][mask][wps] != -1)
  24. return memo[u][mask][wps];
  25. int ans = INF;
  26. for(int v = 0; v < N; v++){
  27. if(v != u && !(mask & (1 << v))){
  28. ans = min(ans, dist[u][v] + tsp(v, mask | (1 << v), wps));
  29. if(wps > 0)
  30. ans = min(ans, tsp(v, mask | (1 << v), wps-1));
  31. }
  32. }
  33. return memo[u][mask][wps] = ans;
  34. }
  35.  
  36. int main(){
  37. int T, M, K;
  38. int a, b, c, ans;
  39. scanf("%d", &T);
  40. while(T--){
  41. scanf("%d %d %d", &N, &M, &K);
  42. dist.assign(N, vi(N, INF));
  43. while(M--){
  44. scanf("%d %d %d", &a, &b, &c);
  45. a--; b--;
  46. dist[a][b] = dist[b][a] = c;
  47. }
  48. memo.assign(N, vvi(1 << N, vi(K+1, -1)));
  49. ans = tsp(0, 1, K);
  50. printf("%d\n", (ans != INF) ? ans : -1);
  51. }
  52. return 0;
  53. }
Add Comment
Please, Sign In to add comment