Untitled
unknown
plain_text
2 years ago
1.7 kB
6
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...