Advertisement
a53

Nunta

a53
Feb 6th, 2018
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. ifstream f("nunta.in");
  4. ofstream g("nunta.out");
  5. struct nod
  6. {
  7. int inf;
  8. nod *leg;
  9. } *L[20001];
  10. int n,m,viz[20001],v[20001],k,nr,var,s;
  11.  
  12. void adaug(int x,int y)
  13. {
  14. nod *c;
  15. c=new nod;
  16. c->inf=y;
  17. c->leg=L[x];
  18. L[x]=c;
  19. }
  20.  
  21. void citire()
  22. {
  23. int i,x,y;
  24. f>>n>>m;
  25. for(i=1;i<=m;++i)
  26. {
  27. f>>x>>y;
  28. adaug(x,y);
  29. adaug(y,x);
  30. }
  31. f.close();
  32. }
  33.  
  34. void DF(int i)
  35. {
  36. nod *c;
  37. viz[i]=1;
  38. ++nr;
  39. for(c=L[i];c;c=c->leg)
  40. if (!viz[c->inf])
  41. DF(c->inf);
  42. }
  43.  
  44. int main()
  45. { int i,j;
  46. citire();
  47. for (i=1;i<=n;++i)
  48. if(!viz[i])
  49. {
  50. nr=0;
  51. DF(i);
  52. if (nr>=2)
  53. v[++k]=nr;
  54. }
  55. g<<k<<'\n';
  56. s=0; ///numarul de invitati din grupurile selectate
  57. var=0; /// numarul de variante de aranjare a mesei cu cel putin n/2+1 invitati
  58. i=0; /// indicele grupului curent
  59. while (s<=n/2 && i<=k) s+=v[++i]; /// prima varianta posibila
  60. var+=k-i+1; /// se aduna numarul de variante care incep cu v[1]
  61. j=1;
  62. while(i<=k)
  63. {
  64. s-=v[j];
  65. while(s<=n/2 && i<=k)
  66. s+=v[++i];
  67. var+=k-i+1; ///se aduna numarul variantelor care incep cu V[j+1]
  68. ++j;
  69. }
  70. g<<var;
  71. g.close();
  72. return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement