蒟蒻只会链表,就用链表做的,代码:
#include <bits/stdc++.h>
using namespace std;
const int N(1e7+6);
struct Node{
int data=INT_MAX;
Node *next=NULL;
};
Node a[N];
int n,m,ii,jj,realij[N];
char x;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
Node *p=new Node;
scanf("%d",&p->data);
a[i].next=p;
realij[i]=i;
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
cin>>x;
if(x=='M')
{
cout<<"";
scanf("%d%d",&ii,&jj);
while(realij[ii]!=ii)
ii=realij[ii];
while(realij[jj]!=jj)
jj=realij[jj];
if(ii==jj)
continue;
Node *m=&a[ii];
while(m->next!=NULL)
m=m->next;
m->next=a[jj].next;
realij[jj]=ii;
}
else
{
int *minx=&a[i].data;
scanf("%d",&ii);
while(realij[ii]!=ii)
ii=realij[ii];
Node *q=&a[ii];
while(q->next!=NULL)
{
q=q->next;
if((q->data)<*minx)
minx=&q->data;
}
if(*minx<INT_MAX)
printf("%d\n",*minx);
else
printf("%d\n",0);
*minx=INT_MAX;
}
}
//debug + delete
// for(int i=1;i<=n;i++)
// {
// cout<<endl;
// Node *pp=&a[i];
// while(pp->next!=NULL)
// {
// pp=pp->next;
// cout<<pp->data<<" ";
// }
// }
for(int i=1;i<=n;i++)
{
Node *r1=a[i].next;
Node *r2;
while(r1->next!=NULL)
{
r2=r1->next;
delete r1;
r1=r2;
}
}
return 0;
}