Untitled
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...