Facebook
From Nemanja, 4 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 106
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. bool pos[10005],pos2[10005];
  4. int n,a,b,s,d,nzv[10005],brnzv;
  5. vector <int>v[10005],vekarttac;
  6. bool dfsodsec(int poc){
  7.     pos[poc]=1;
  8.     bool ret=0;
  9.     bool q=0;
  10.     if(poc==d){pos[poc]=0;return 1;}
  11.     for(int i=0;i<v[poc].size();i++){
  12.         if(!pos[v[poc][i]]){
  13.             q=dfsodsec(v[poc][i]);
  14.             if(!q){
  15.                 v[poc].erase(v[poc].begin()+i);
  16.                 i--;
  17.             }
  18.             else ret=1;
  19.         }
  20.     }
  21.     pos[poc]=0;
  22.     return ret;
  23. }
  24. void ulaz(){
  25.     cin>>n;
  26.     scanf("%d %d",&a,&b);
  27.     while(a!=-1){
  28.     v[a].push_back(b);
  29.     v[b].push_back(a);
  30.     scanf("%d %d",&a,&b);
  31.     }
  32.     scanf("%d %d",&s,&d);
  33.     return;
  34. }
  35. void odsecanje_nepotrebnog(){
  36.     bool qw=dfsodsec(s);
  37.     return;
  38. }
  39. //void odseci(int cvor){
  40. //    brnzv=v[cvor].size();
  41. //    for(int i=0;i<brnzv;i++)nzv[i]=v[cvor][i];
  42. //    v[cvor].clear();
  43. //}
  44. //void vrati(int cvor){
  45. //    for(int i=0;i<brnzv;i++)v[cvor].push_back(nzv[i]);
  46. //}
  47. //bool proverigraf(int poc){
  48. //    bool q=0;
  49. //    pos2[poc]=1;
  50. //    if(poc==d){pos2[poc]=0;return 1;}
  51. //    for(int i=0;i<v[poc].size();i++){
  52. //        if(!pos2[v[poc][i]]){
  53. //            q=proverigraf(v[poc][i]);
  54. //            if(q){pos2[poc]=0;return 1;}
  55. //        }
  56. //    }
  57. //    pos2[poc]=0;
  58. //    return 0;
  59. //
  60. //}
  61. //void dfszasecenje(int poc){
  62. //    odseci(poc);
  63. //    if(!proverigraf(s))vekarttac.push_back(poc);
  64. //    vrati(poc);
  65. //    pos[poc]=1;
  66. //    for(int i=0;i<v[poc].size();i++){
  67. //        if(!pos[v[poc][i]]){
  68. //            dfszasecenje(v[poc][i]);
  69. //        }
  70. //    }
  71. //    return ;
  72. //
  73. //}
  74. //void nalazenenje_artikulacionih_tacaka(){
  75. //    dfszasecenje(s);
  76. //    vekarttac.erase(vekarttac.begin()+0);
  77. //    return;
  78. //}
  79. int brizlaz,nizizlaz[10005];
  80. void dfs(int poc){
  81.     brizlaz++;
  82.     nizizlaz[brizlaz]=poc;
  83.     pos2[poc]=1;
  84.     for(int i=0;i<v[poc].size();i++){
  85.         if(!pos2[v[poc][i]]){
  86.             dfs(v[poc][i]);
  87.         }
  88.     }
  89.     return ;
  90.  
  91. }
  92. void ispis(){
  93.  dfs(s);
  94.  sort(nizizlaz+1,nizizlaz+1+brizlaz);
  95.  for(int i=1;i<=brizlaz;i++)printf("%d ",nizizlaz[i]);cout<<endl;
  96. }
  97. int main () {
  98.     ulaz(); ///OK
  99.     odsecanje_nepotrebnog();///OK
  100.     //nalazenenje_artikulacionih_tacaka();
  101. //for(int i=0;i<vekarttac.size();i++)cout<<vekarttac[i]<<" ";cout<<endl;
  102.     ispis();
  103. return 0;
  104. }
  105.