Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2014
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. /*
  2. */
  3.  
  4. //#pragma comment(linker, "/STACK:16777216")
  5. #include <fstream>
  6. #include <iostream>
  7. #include <string>
  8. #include <complex>
  9. #include <math.h>
  10. #include <set>
  11. #include <vector>
  12. #include <map>
  13. #include <queue>
  14. #include <stdio.h>
  15. #include <stack>
  16. #include <algorithm>
  17. #include <list>
  18. #include <ctime>
  19. #include <memory.h>
  20.  
  21. #define y0 sdkfaslhagaklsldk
  22. #define y1 aasdfasdfasdf
  23. #define yn askfhwqriuperikldjk
  24. #define j1 assdgsdgasghsf
  25. #define tm sdfjahlfasfh
  26. #define lr asgasgash
  27.  
  28. #define eps 1e-11
  29. //#define M_PI 3.141592653589793
  30. #define bs 1000000007
  31. #define bsize 256
  32.  
  33. using namespace std;
  34.  
  35. long n,n1,m,a,b,dp[105][78777];
  36. long tmask;
  37. vector<long> g[2000];
  38.  
  39. void add(long&a,long&b)
  40. {
  41. a+=b;
  42. if (a>=bs)a-=bs;
  43. }
  44.  
  45. long ar[200];
  46.  
  47. long gett1(long msk,long p)
  48. {
  49. for (int i=1;i<=n;i++)
  50. {ar[i]=msk%3;msk/=3;}
  51. for (int j=0;j<g[p].size();j++)
  52. {
  53. long q=g[p][j];
  54. if (ar[q]==0)ar[q]=1;
  55. }
  56. long r=0;
  57. for (int i=n;i;--i)
  58. r=r*3+ar[i];
  59. return r;
  60. }
  61.  
  62. long answ;
  63.  
  64. long gett2(long msk, long v)
  65. {
  66. for (int i=1;i<=n;i++)
  67. {ar[i]=msk%3;msk/=3;}
  68. if (ar[v]==2)return -1;
  69. ar[v]=2;
  70.  
  71. long r=0;
  72. for (int i=n;i;--i)
  73. r=r*3+ar[i];
  74. return r;
  75. }
  76.  
  77. bool nice(long msk)
  78. {
  79. for (int i=1;i<=n;i++)
  80. {ar[i]=msk%3;msk/=3;}
  81. for (int i=1;i<=n;i++)
  82. if( ar[i]==1)return false;
  83. return true;
  84. }
  85.  
  86.  
  87. void show(long msk)
  88. {
  89. for (int i=1;i<=n;i++)
  90. {ar[i]=msk%3;msk/=3;}
  91. for (int i=1;i<=n;i++)
  92. cout<<ar[i];
  93. cout<<endl;
  94. }
  95.  
  96. int main(){
  97. //freopen("rush.in","r",stdin);
  98. //freopen("rush.out","w",stdout);
  99. //freopen("C:/input.txt","r",stdin);
  100. //freopen("C:/output.txt","w",stdout);
  101. ios_base::sync_with_stdio(0);
  102. //cin.tie(0);
  103.  
  104. cin>>n>>n1>>m;
  105.  
  106. for (int i=1;i<=m;i++)
  107. {
  108. cin>>a>>b;
  109. g[b].push_back(a);
  110. }
  111.  
  112. dp[0][0]=1;
  113.  
  114. long bb=0;
  115.  
  116. for (int i=1;i<=n1;i++)
  117. {
  118. for (int old=0;old<60000;old++)
  119. {
  120. if (dp[i-1][old]==0)continue;
  121. // don't use
  122. tmask=gett1(old,i);
  123. bb=max(bb,tmask);
  124. add(dp[i][tmask],dp[i-1][old]);
  125. for (int j=0;j<g[i].size();j++)
  126. {
  127. tmask=gett2(old,g[i][j]);
  128. bb=max(bb,tmask);
  129. if (tmask!=-1)
  130. add(dp[i][tmask],dp[i-1][old]);
  131. }
  132. }
  133. }
  134.  
  135. answ=0;
  136. for (int i=0;i<60000;i++)
  137. if (nice(i))
  138. if (dp[n1][i]>0){
  139. /* show(i);
  140. cout<<i<<endl;
  141. cout<<dp[n1][i]<<endl;
  142. cout<<endl;
  143. */ add(answ,dp[n1][i]);}
  144.  
  145. cout<<answ<<endl;
  146.  
  147. cin.get();cin.get();
  148. return 0;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement