Advertisement
Guest User

Untitled

a guest
Feb 24th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.88 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("elicoptere.in");
  6. ofstream fout("elicoptere.out");
  7.  
  8. struct insula
  9. {
  10. int x1, y1, x2, y2, x3, y3;
  11. };
  12.  
  13. insula ins[101];
  14.  
  15. vector <int> v[101];
  16.  
  17. struct drum
  18. {
  19. int a, b;
  20. float dist;
  21. };
  22.  
  23. drum d[4951];
  24.  
  25. bool cmp(drum x, drum y)
  26. {
  27. if(x.dist<y.dist)
  28. return true;
  29. return false;
  30. }
  31.  
  32. int k, cer, n, e, ok, mu, maxi, distmin;
  33. int viz[101];
  34. int t[101];
  35.  
  36. void join(int x, int y)
  37. {
  38. int rx, ry;
  39. rx=tata(x);
  40. ry=tata(y);
  41. t[rx]=ry;
  42. }
  43.  
  44. int tata(int nod)
  45. {
  46. if(t[x]==x)
  47. return x;
  48. return t[x]=tata(t[x]);
  49. }
  50.  
  51. void dfs(int nod)
  52. {
  53. viz[nod]=1;
  54. for(int i=0; i<v[nod].size(); i++)
  55. if(viz[v[nod][i]]==0)
  56. {
  57. dfs(i);
  58. mu++;
  59. }
  60. }
  61.  
  62. int maxim(int elem1, int elem2, int elem3)
  63. {
  64. int l;
  65. if(elem1>elem2)
  66. l=elem1;
  67. else
  68. l=elem2;
  69. if(l>elem3)
  70. return l;
  71. return elem3;
  72. }
  73.  
  74. int minim(int elem1, int elem2, int elem3)
  75. {
  76. int l;
  77. if(elem1<elem2)
  78. l=elem1;
  79. else
  80. l=elem2;
  81. if(l<elem3)
  82. return l;
  83. return elem3;
  84. }
  85.  
  86. int exista_drum(int el1, int el2)
  87. {
  88. if(maxim(ins[el1].x1, ins[el1].x2, ins[el1].x3)<=minim(ins[el2].x1, ins[el2].x2, ins[el2].x3))
  89. if(maxim(ins[el1].y1, ins[el1].y2, ins[el1].y3)<=minim(ins[el2].y1, ins[el2].y2, ins[el2].y3))
  90. return 0;
  91. if(maxim(ins[el1].x1, ins[el1].x2, ins[el1].x3)<=minim(ins[el2].x1, ins[el2].x2, ins[el2].x3))
  92. if(minim(ins[el1].y1, ins[el1].y2, ins[el1].y3)>=maxim(ins[el2].y1, ins[el2].y2, ins[el2].y3))
  93. return 0;
  94. if(minim(ins[el1].x1, ins[el1].x2, ins[el1].x3)>=maxim(ins[el2].x1, ins[el2].x2, ins[el2].x3))
  95. if(minim(ins[el1].y1, ins[el1].y2, ins[el1].y3)>=maxim(ins[el2].y1, ins[el2].y2, ins[el2].y3))
  96. return 0;
  97. if(minim(ins[el1].x1, ins[el1].x2, ins[el1].x3)>=maxim(ins[el2].x1, ins[el2].x2, ins[el2].x3))
  98. if(maxim(ins[el1].y1, ins[el1].y2, ins[el1].y3)>=minim(ins[el2].y1, ins[el2].y2, ins[el2].y3))
  99. return 0;
  100. return 1;
  101. }
  102.  
  103. float aflu_dist(int el1, int el2)
  104. {
  105. float distx, disty;
  106. int elem1, elem2;
  107.  
  108. if(distx==0 || distx>disty)
  109. return disty;
  110. if(disty==0 || distx<disty)
  111. return distx;
  112. }
  113.  
  114. void verif_drum(int elem)
  115. {
  116. for(int j=elem-1; j>0; j++)
  117. {
  118. if(exista_drum(j, elem) && aflu_dist(j, elem)<=float(k))
  119. {
  120. e++;
  121. d[e].a=elem;
  122. d[e].b=j;
  123. v[j].push_back(elem);
  124. v[elem].push_back(j);
  125. }
  126. }
  127. }
  128.  
  129. int main()
  130. {
  131. fin>>cer>>n>>k;
  132. for(int i=1; i<=n; i++)
  133. {
  134. fin>>ins[i].x1>>ins[i].y1>>ins[i].x2>>ins[i].y2>>ins[i].x3>>ins[i].y3;
  135. verif_drum(i);
  136. }
  137. if(cer==1)
  138. fout<<e;
  139. if(cer==2)
  140. {
  141. ok=1;
  142. maxi=0;
  143. for(int i=1; i<=n && ok; i++)
  144. {
  145. mu=1;
  146. dfs(i);
  147. if(mu>maxi)
  148. maxi=mu;
  149. if(mu>n/2)
  150. ok--;
  151. for(int j=1; j<=n; j++)
  152. viz[j]=0;
  153. }
  154. fout>>maxi;
  155. }
  156. if(cer==3)
  157. {
  158. if(e<n-1)
  159. {
  160. for(int i=1; i<=e; i++)
  161. distmin+=d[i].dist;
  162. fout<<setprecison(3)<<distmin;
  163. }
  164. else
  165. {
  166. for(int i=1; i<=n; i++)
  167. t[i]=i;
  168. sort(d+1, d+e+1, cmp);
  169. int nivel=1, var=1;
  170. while(nivel<=n-1 && var<=e)
  171. {
  172. if(t[tata(d[var].a)]!=t[tata(d[var].b)])
  173. {
  174. distmin+=d[var].dist;
  175. join(d[var].a, d[var].b);
  176. nivel++;
  177. }
  178. var++;
  179. }
  180. fout<<setprecison(3)<<distmin;
  181. }
  182. }
  183. return 0;
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement