Advertisement
Guest User

tsp

a guest
Mar 30th, 2012
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. #include <vector>
  2. #include <cassert>
  3. #include <list>
  4. #include <map>
  5. #include <set>
  6. #include <queue>
  7. #include <deque>
  8. #include <stack>
  9. #include <bitset>
  10. #include <algorithm>
  11. #include <functional>
  12. #include <numeric>
  13. #include <utility>
  14. #include <sstream>
  15. #include <iostream>
  16. #include <iomanip>
  17. #include <cstdio>
  18. #include <cmath>
  19. #include <cstdlib>
  20. #include <ctime>
  21. #include <cstring>
  22. #include <climits>
  23. #include <fstream>
  24. #include <sstream>
  25. #include<ctype.h>
  26.  
  27. #define PI 3.1415926535897932384626433832795028841971693993751058209749Lf
  28. #define INF 2000000000
  29. #define INFI 1e37
  30. #define pb push_back
  31. #define PRINT(x) cout << #x << " " << x << endl
  32. #define BUF 4096
  33. #define MAX 1010
  34. char ibuf[BUF];
  35. int ipt = BUF;
  36.  
  37. int readInt() {
  38. while (ipt < BUF && ibuf[ipt] < '0') ipt++;
  39. if (ipt == BUF) {
  40. fread(ibuf, 1, BUF, stdin);
  41. ipt = 0;
  42. while (ipt < BUF && ibuf[ipt] < '0') ipt++;
  43. }
  44. int n = 0;
  45. while (ipt < BUF && ibuf[ipt] >= '0') n = (n*10)+(ibuf[ipt++]-'0');
  46. if (ipt == BUF) {
  47. fread(ibuf, 1, BUF, stdin);
  48. ipt = 0;
  49. while (ipt < BUF && ibuf[ipt] >= '0') n = (n*10)+(ibuf[ipt++]-'0');
  50. }
  51. return n;
  52. }
  53.  
  54. using namespace std;
  55. int t,n,k;
  56. int d[MAX][MAX];
  57. int d1[MAX],d2[MAX];
  58. int sum1[MAX],sum2[MAX];
  59. int main()
  60. {
  61. int x,y;
  62. int i,j,k;
  63. t=readInt();
  64. while(t--)
  65. {
  66. n=readInt();
  67. k=readInt();
  68. memset(d,0, sizeof d);
  69. while(k--)
  70. {
  71. x=readInt();
  72. y=readInt();
  73. d[x+1][y+1]++;
  74. }
  75.  
  76. for(x=n,k=n,y=1;y<=n;--k>0?x--:y++)
  77. {
  78. for(i=x,j=y;i<=n&&j<=n;++i,++j)
  79. d[i][j]=d[i][j-1]+d[i+1][j]-d[i+1][j-1]+d[i][j];
  80.  
  81. }
  82. for(i=1;i+1<=n;i++)
  83. {
  84. sum1[i]=sum1[i-1]+d[i][i+1];
  85. sum2[i]=sum2[i-1]+d[i+1][i];
  86. }
  87.  
  88. d1[1]=d[1][2];d2[1]=d[2][1];
  89. for(j=2;j<n;j++)
  90. {
  91. x=INF;
  92. for(i=1;i<j;i++)
  93. x=min(x,d2[i]+d[i][j+1]+sum2[j-1]-sum2[i]);
  94. d1[j]=x;
  95. x=INF;
  96. for(i=1;i<j;i++)
  97. x=min(x,d1[i]+d[j+1][i]+sum1[j-1]-sum1[i]);
  98. d2[j]=x;
  99.  
  100. }
  101. printf("%d\n",min(d1[n-1]+d[n][n-1],d2[n-1]+d[n-1][n]));
  102. }
  103.  
  104.  
  105. return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement