Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int N,M,K,knoob,psaris[1666],modatos[10101024];
  5. vector <int> vechy[10101024];
  6. vector <int> dist[10101024];
  7.  
  8. int tomh(int polak, int koulak) {
  9. int patatas,trexalsa;
  10. patatas=0;
  11. for (trexalasa=1;trexalasa<=K;++trexalasa) {
  12. patatas+=((polak%2+koulak%2)/2)<<(trexalasa-1);
  13. polak=polak/2;
  14. koulak=koulak/2;
  15. }
  16. return patatas;
  17. }
  18.  
  19. int enosh(int polak, int koulak) {
  20. int patatas;
  21. patatas=polak+koulak-tomh(polak,koulak);
  22. return patatas;
  23. }
  24.  
  25. int fuse (int a,int b) {
  26. return (a*10000+b);
  27. }
  28.  
  29. int defuse (int a, int pios) {
  30. if (pios==1) {
  31. return a/10000;
  32. }
  33. else {
  34. return a%10000;
  35. }
  36. }
  37.  
  38. void connect(int polak,int koulak, int dvorak) {
  39. if (polak!=koulak) {
  40. vechy[polak].push_back(koulak);
  41. vechy[koulak].push_back(polak);
  42. dist[polak].push_back(dvorak);
  43. dist[koulak].push_back(dvorak);
  44. }
  45. }
  46. void kinnect (int polak, int koulak, int dvorak) {
  47. int trexalasa;
  48. for (trexalasa=0;trexalasa<=knoob;++trexalasa) {
  49. connect(fuse(polak,trexalasa),fuse(koulak,trexalasa),dvorak);
  50. }
  51. }
  52.  
  53. int Diejcraft( int sak) {
  54. set<pair <int, int> > setparas;
  55. int who,trexalasa,son;
  56. int dvorak, tmp;
  57. memset(modatos,-1,sizeof(modatos));
  58. modatos[sak]=0;
  59. setparas.insert(make_pair(0,sak));
  60. while(setparas.size() != 0 ) {
  61. who=(*(setparas.begin())).second;
  62. dvorak=(*(setparas.begin())).first;
  63. setparas.erase(setparas.begin());
  64.  
  65. for (trexalasa=1;trexalasa<=e[who].size(); ++trexalasa) {
  66. tmp=d[who][trexalasa-1]+modatos[who];
  67. son=e[who][trexalasa-1];
  68. if ( modatos[son] == -1) {
  69. modatos[son] = tmp;
  70. setparas.insert(make_pair(tmp,son));
  71. }
  72. else if (modatos[son]>tmp) {
  73. setparas.erase(setparas.find(make_pair(modatos[son],son)));
  74. modatos[son]=tmp;
  75. setparas.insert(make_pair(tmp,son));
  76. }
  77. }
  78. }
  79. }
  80.  
  81. int main() {
  82. int trexalasa,trexalasb,dvorak,tmp,polak,koulak;
  83. scanf("%d %d %d",&N,&M,&K);
  84. knoob=(1<<K)-1;
  85. //printf("%d\n",knoob);
  86. for (trexalasa=1;trexalasa<=N;++trexalasa) {
  87. scanf("%d",&dvorak);
  88. for(trexalasb=1;trexalasb<=dvorak;++trexalasb) {
  89. scanf("%d",&tmp);
  90. psaris[trexalasa]+=1<<(tmp-1);
  91. }
  92. for (trexalasb=1;trexalasb<=knoob;++trexalasb) {
  93. connect(fuse(trexalasa,trexalasb),fuse(trexalasa,enosh(trexalasb,psarhs[trexalasa])),0);
  94. }
  95. }
  96. for (trexalasa=1;trexalasa<=M;++trexalasa) {
  97. scanf("%d %d %d",&polak,&koulak,&dvorak);
  98. kinnect(polak,koulak,dvorak);
  99. }
  100. Diejcraft(fuse(1,0));
  101. return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement