RT.
#include<bits/stdc++.h>
using namespace std ;
const int MAX = 1005 ;
const int MAXN = 105 ;
const int INF = 1e8 ;
int cnt , T , F[MAXN][MAX] , D[MAX][MAX] , Next[MAX] , Ans , Sup , Now , a , b , c ;
int N , M , i , j , k , Log[MAX] , Max , A[MAXN][MAXN] ;
int main() {
memset(A , 63 , sizeof(A)) ;
memset(F , 63 , sizeof(F)) , Ans = INF ;
cin >> N >> M ; Max = (1 << N) - 1 ;
for(i = 1 ; i <= M ; i++)
scanf("%d %d %d" , &a , &b , &c) ;
A[a][b] = A[b][a] = min(c , A[a][b]) ;
for(i = 0 ; i <= N ; i++) Log[1 << i] = i ;
for(i = 0 ; i <= N ; i++) F[0][1 << i] = 0 ;
for(i = 1 ; i <= Max ; i++) {
cnt = 0 ;
for(j = Sup = Max ^ i ; j ; j = (j - 1) & Sup) Next[j] = cnt , cnt = j ;
for(j = cnt ; j ; j = Next[j]) {
Now = Log[j & (-j)] + 1 , T = INF ;
for(k = 1 ; k <= N ; k++)
if(1 << (k - 1) & i) T = min(T , A[Now][k]) ;
D[i][j] = D[i][j ^ (j & (-j))] + T ;
}
}
for(i = 1 ; i < N ; i++)
for(j = 1 ; j <= Max ; j++)
for(k = j ; k ; k = (k - 1) & j)
F[i][j] = min(F[i][j] , F[i - 1][j ^ k] + i * D[j ^ k][k]) ;
for(i = 0 ; i <= N ; i++) Ans = min(Ans , F[i][Max]) ;
cout << Ans << endl ;
return 0 ;
}
总是输出INF(1e8),为什么?