Untitled

 avatar
unknown
plain_text
a year ago
2.5 kB
3
Indexable
#include<bits/stdc++.h>
using namespace std;

struct canh
{
	int dau,cuoi;
	int trongso;
};
long long ntest,m,i,u,c,v;
long long d[101],dem=0,dad[101];
canh CA[10001];
long long chiphi=0;

int FindDad(int u)
{
	if(dad[u]==-1)
		{
			dad[u]=u;return u;
		}
	else return dad[u];
}

void Add(int u,int v)
{
	if(u>v)	
		for(int i=1;i<=m;i++)
			{
				if(dad[i]==u)
					dad[i]=v;
			}
	else if(v>u) 
		for(int i=1;i<=m;i++)
				{
					if(dad[i]==v)
						dad[i]=u;
				}		
}
void QUICK_SORT(canh CA[],int left,int right)
{
	if(left==right)
		return;
	 if(left<right)
		{
			int k=(left+right)/2;
			int i=left,j=right;
		while(i<=j)
			{
				while(CA[i].trongso<CA[k].trongso) i++;
				while(CA[j].trongso>CA[k].trongso) j--;
				if(i<=j)
					{
						canh g=CA[i];
						CA[i]=CA[j];
						CA[j]=g;
						i++,j--;
					}
			}
		QUICK_SORT(CA,left,j);
		QUICK_SORT(CA,i,right);	
		}
}


void quickSort(canh CA[], int l, int r)
{
	if(l<r){
		
    int key = CA[(l+r)/2].trongso;
    int i = l, j = r;
    while(i <= j)
    {
        while(CA[i].trongso < key) i++;       
        while(CA[j].trongso > key) j--;       
        if(i <= j)
        {
            if (i < j)
            	{
            		canh g=CA[i];
					CA[i]=CA[j];
					CA[j]=g;
				}
            i++;
            j--;
        }
    }
    quickSort(CA, l, j);   
    quickSort(CA, i, r); 
	}
}

void Selec(canh CA[],int n)
{
	for(int i=1;i<=n-1;i++)
		for(int j=i+1;j<=n;j++)
			if(CA[i].trongso>CA[j].trongso)
				{
					canh g=CA[i];
					CA[i]=CA[j];
					CA[j]=g;
				}
}
void process()
{
	//QUICK_SORT(CA,1,dem);
	//Selec(CA,dem);
	quickSort(CA,1,dem);
	int demcanh=0,demdinh=0;
	int i1=dem,x,y;
	while(demcanh<m-1&&demdinh<m)
	{
		x=FindDad(CA[i1].dau);
		if(x==-1) demdinh++;
		y=FindDad(CA[i1].cuoi);
		if(y==-1) demdinh++;
		if(x!=y)
			{
				Add(x,y);demcanh++;
				chiphi-=CA[i1].trongso;
			}
		//cout <<CA[i1].dau<<" "<<CA[i1].cuoi<<" "<<CA[i1].trongso<<endl;
		i1--;
	}
}
int main()
{
	//freopen("input.txt.txt","r",stdin);
	ios::sync_with_stdio(false);
	cin>>ntest;
	for(int j=1;j<=ntest;j++)
		{
			cin >>m;chiphi=0,dem=0;
			for(int jj=1;jj<=m;jj++)
				{
					cin >>i>>u>>c; 
					d[i]=u,dad[i]=-1;
					for(int j1=1;j1<=c;j1++)
						{
							cin >>v;
							if(i>v)	
								{
									CA[++dem].dau=i; CA[dem].cuoi=v;
									CA[dem].trongso=d[i]+d[v];
									chiphi+=CA[dem].trongso;
								}
						}
				}
				process();
				//for(int i=1;i<=dem;i++)
				//	cout <<CA[i].dau<<"  "<<CA[i].cuoi<<"  "<<CA[i].trongso<<endl;
				cout <<chiphi<<endl;
			
		}
}
Editor is loading...
Leave a Comment