Untitled

 avatar
unknown
plain_text
2 years ago
1.7 kB
3
Indexable
#include <iostream>
using namespace std;
#define max 105
#define vc 1000000

int node,edge;
int mayBanDa[max];
int visit[max];
int a[max][max]={0};
int stack[max];
int top=-1;
int Min=0;
int ans;
bool flag; // tim chu trinh

void resetVisit(){
	for(int i=0;i<max;i++){
		visit[i]=0;
	}
}

void reset(){
	for(int i=0;i<max;i++){
		mayBanDa[i]=0;
		for(int j=0;j<max;j++){
			a[i][j]=0;
		}
	}
	resetVisit();
}

void DFS(int tempThanh, int thanh, int sl,int tempMin, int d1,int d2){
	if(tempThanh==thanh&& sl>=3){
		flag=true;
		ans+=tempMin;
		a[d1][d2]=0;
		a[d2][d1]=0;
		return;
	}
	for(int col=0;col<node;col++){
		if(flag) return;
		if(a[tempThanh][col]==1 && (!visit[col]||(col==thanh &&sl>=3))){
			visit[col]=1;
			int value = mayBanDa[tempThanh]+mayBanDa[col];
			if(tempMin>value){
				DFS(col,thanh,sl+1,value,tempThanh,col);
			}else{
				DFS(col,thanh,sl+1,tempMin,d1,d2);
			}

		}

	}

}

void solve(){
	for(int thanh=0;thanh<node;thanh++){
		resetVisit();
		visit[thanh]=1;
		flag=false;
		DFS(thanh,thanh,1,vc,-1,-1);
		while(flag){
			resetVisit();
			visit[thanh]=1;
			flag=false;
			DFS(thanh,thanh,1,vc,-1,-1);
		}

	}
}

int main(){
	int T;
	freopen("Text.txt","r",stdin);
	cin>>T;
	for( int tc=1;tc<=T;tc++){
		int flag = 1;
		int min=0;
		ans=0;
		int thanh,k,tempThanh;
		reset();
		cin>>node;		
		for(int i=0;i<node;i++){
			cin>>thanh>>k;
			mayBanDa[thanh]=k;
			cin>>edge;
			for(int i=0;i<edge;i++){
				cin>>tempThanh;
				a[thanh][tempThanh]=1;
				a[tempThanh][thanh]=1;

			}
		}
		ans =0;
		solve();
		cout<<ans<<endl;
	}
	return 0;
}
Editor is loading...