Cod sursa(job #1269064)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 21 noiembrie 2014 20:25:38
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
#include <map>
#define nmax 100010
using namespace std;
FILE *f=fopen("disjoint.in","r");
FILE *g=fopen("disjoint.out","w");
int n,m,p[nmax];
int x,y,cod,k,r;
multimap <int,int> v;
multimap <int,int>::iterator it,itmax;

int main()
{int i,j;
fscanf(f,"%d %d",&n,&m);

for (i=1;i<=n;i++) {v.insert(make_pair(i,i));
                    p[i]=i;}
while (m!=0)
        {fscanf(f,"%d %d %d\n",&cod,&x,&y);
         if (cod==2) {if (p[x]==p[y]) fprintf(g,"DA\n");
                                 else fprintf(g,"NU\n");
                      }
                else {k=max(p[x],p[y]);
                      r=min(p[x],p[y]);

                      itmax=v.upper_bound(k);
                      for (it=v.lower_bound(k);it!=itmax;it++)
                            {i=it->second;
                             p[i]=r;
                             v.insert(make_pair(r,i));}

                      it=v.lower_bound(k);
                      itmax--;
                      v.erase(it,itmax);
                      }
         m--;
         }


return 0;
}