Pagini recente » Diferente pentru utilizator/tlmgeox_13 intre reviziile 7 si 6 | Istoria paginii utilizator/andreiteodor | Profil bulatr | Diferente pentru utilizator/znakeu2 intre reviziile 5 si 2 | Cod sursa (job #2772076)
#include <fstream>
#include <algorithm>
#include <queue>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int MMax=100008;
queue < int > Q;
pair < int, int >P[MMax];
int n,m,TT[MMax], RG[MMax];
int k;
struct muchie{
int cod,x,y;
}v[MMax];
void read(){
fin>>n>>m;
int i;
for(i=1;i<=m;i++)
fin>>v[i].cod>>v[i].x>>v[i].y;
}
int Find(int Nod) {
while(TT[Nod]!=Nod)
Nod=TT[Nod];
return Nod;
}
void unire(int x, int y) {
int i,nr=0;
if(RG[x] < RG[y]) {
for(i=1;i<=n;i++) {
if(TT[i]==TT[x] && i!=x) {
TT[x]=y;
TT[i]=y;
nr++;
}
}
if(nr==0)
TT[x]=y;
}
nr=0;
if(RG[y] < RG[x]) {
for(i=1;i<=n;i++) {
if(TT[i]==TT[y] && i!=y) {
TT[y]=x;
TT[i]=x;
nr++;
}
}
if(nr==0)
TT[y]=x;
}
nr=0;
if(RG[x] == RG[y])
{
for(i=1;i<=n;i++) {
if(TT[i]==TT[y] && i!=y) {
TT[y]=x;
TT[i]=x;
nr++;
}
}
if(nr==0)
TT[y]=x;
RG[x]++;
}
}
void solve() {
int ok;
for(int i=1;i<=m;i++) {
if(v[i].cod==1) {
if(Find(v[i].x) != Find(v[i].y)) {
unire(Find(v[i].x), Find(v[i].y));
//P[++k].first=v[i].x;
//P[k].second=v[i].y;
}
//fout<<"Tatii numerelor "<<v[i].x<<" si "<<v[i].y<<" sunt "<<TT[v[i].x]<<" si "<<TT[v[i].y];
//fout<<'\n';
for(int q=i+1;q<=m;q++)
{
while(v[q].cod==2)
{
if(TT[v[q].x]==TT[v[q].y]) {
fout<<"Tatal numerelor "<<v[q].x<<" si "<<v[q].y<<" este "<<TT[v[q].x];
fout<<'\n';
//fout<<"DA";
ok=1;
//Q.push(ok);
}
else {
fout<<"Tatii numerelor "<<v[q].x<<" si "<<v[q].y<<" sunt "<<TT[v[q].x]<<" si "<<TT[v[q].y];
fout<<'\n';
//fout<<"NU";
ok=0;
//Q.push(ok);
}
}
/*if(ok==1) {
fout<<"DA";
break;
}
else{ if(ok==0)
fout<<"NU";
break;
}*/
//if(Q.back()==1)
// fout<<"DA";
//else
// fout<<"NU";
//fout<<ok<<'\n';
}
/*if(ok==1) {
fout<<"DA";
break;
}
else {
fout<<"NU";
break;
}*/
}
//fout<<'\n';
//if(ok==1)
// fout<<"DA";
//else
// fout<<"NU";
/*while(v[i].cod==2)
{
if(TT[v[i].x]==TT[v[i].y])
fout<<TT[v[i].x];
else
fout<<TT[v[i].x]<<" "<<TT[v[i].y];
}*/
}
}
/*void afisare()
{
int i;
for(i=1;i<=m;i++)
if(v[i].cod==2) {
if(TT[P[i].first]==TT[P[i].second])
fout<<"DA";
else
fout<<"NU";
}
}
*/
int main()
{
read();
for(int i=1;i<=m;i++)
{
//if(v[i].cod==1) {
TT[i]=i;
RG[i]==1;
// }
}
solve();
// afisare();
return 0;
}