Untitled
unknown
plain_text
2 years ago
2.7 kB
2
Indexable
#include <stdio.h> #include <iostream> using namespace std; int const max_size =105; int const vc=1000000; int mayBD[max_size]; int A[max_size][max_size]; // luu lai matran ke int visit[max_size]; int n; // so thanh int ans; bool flag; // tim dc chu trinh hay chua void reset(){ // rset visit de dfs for(int i=0; i<n;i++){ visit[i]=0; } } 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<n; col ++){ if(flag) return ; if(A[tempThanh][col]==1 &&(!visit[col]||( col==thanh && sl>=3))) { visit[col]=1; int value =mayBD[tempThanh]+mayBD[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<n; thanh++){ reset();// duyet cac thanh de dfs visit[thanh]=1; flag=false; dfs(thanh,thanh,1,vc,-1,-1); while(flag){ reset(); visit[thanh]=1; flag=false; dfs(thanh,thanh,1,vc,-1,-1); } } } int main(int argc, char** argv) { int tc, T; // The freopen function below opens input.txt file in read only mode, and afterward, // the program will read from input.txt file instead of standard(keyboard) input. // To test your program, you may save input data in input.txt file, // and use freopen function to read from the file when using cin function. // You may remove the comment symbols(//) in the below statement and use it. // Use #include<cstdio> or #include<stdio.h> to use the function in your program. // But before submission, you must remove the freopen function or rewrite comment symbols(//). freopen("text.txt", "r", stdin); cin >> T; for(tc = 1; tc <= T; tc++) { cin>>n; // reset for(int i=0; i<n;i++){ for(int j=0; j<n;j++){ A[i][j]=0; } } int thanh,slke, soMayBD, tempThanh; for(int i=0; i<n;i++){ cin>>thanh>>soMayBD>>slke; mayBD[thanh]=soMayBD; for(int k=0; k<slke; k++){ cin>>tempThanh; A[thanh][tempThanh]=1; A[tempThanh][thanh]=1; } } ans=0; solve(); cout<<ans<<endl; } return 0;//Your program should return 0 on normal termination. } 3 3 0 1 2 1 2 1 2 2 0 2 2 3 2 0 1 7 0 1 2 2 3 1 2 2 3 4 2 3 2 0 5 3 1 4 0 1 5 6 4 2 2 1 6 5 3 2 2 3 6 1 2 3 4 4 0 1 2 1 2 1 8 2 0 3 2 16 2 0 3 3 12 2 1 2 out 3 4 9
Editor is loading...