#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define STEINER_SIZE 14 using namespace std; int dist[35][35]; vector > edge[35]; bool isImportant[35]; vector important; vector optional; int steiner_dp[1<>N>>M>>T; for(int i=0;i<35;i++)for(int j=0;j<35;j++) dist[i][j]=INT_MAX/2; for(int i=0;i<35;i++) isImportant[i]=false; for(int i = 0 ; i >a>>b>>c; a--;b--; dist[a][b]=dist[b][a]=c; edge[a].push_back(make_pair(-c,b)); edge[b].push_back(make_pair(-c,a)); } for(int i=0; i>a; a--; isImportant[a]=true; important.push_back(a); } for( int i=0;i > pq; int curBest[N]; for( int j =0;j p=pq.top(); pq.pop(); int len=-p.first; int nxt=p.second; //cout << len <<" " << nxt << ", "; if( !use[nxt] ) continue; n++; score+=len; use[nxt]=false; for( int j=0;j<(int)edge[nxt].size();j++){ if( use[edge[nxt][j].second]&&-edge[nxt][j].first < curBest[edge[nxt][j].second]){ pq.push(edge[nxt][j]); curBest[edge[nxt][j].second]=-edge[nxt][j].first; } } } //cout << score << endl; if( n == size )ans=min(score,ans); } cout << ans<