/* -*- coding: utf-8 -*- * * 845.cc: No.845 最長の切符 - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 16; const int NBITS = 1 << MAX_N; /* typedef */ /* global variables */ int ds[MAX_N][MAX_N]; int dp[NBITS][MAX_N]; /* subroutines */ inline void setmax(int &a, int b) { if (a < b) a = b; } /* main */ int main() { int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) { int a, b, c; scanf("%d%d%d", &a, &b, &c); a--, b--; if (ds[a][b] < c) ds[a][b] = ds[b][a] = c; } int nbits = 1 << n, maxd = 0; memset(dp, -1, sizeof(dp)); for (int i = 0, bi = 1; i < n; i++, bi <<= 1) dp[bi][i] = 0; for (int bits = 1; bits < nbits; bits++) for (int i = 0; i < n; i++) if (dp[bits][i] >= 0) for (int j = 0, bj = 1; j < n; j++, bj <<= 1) if (! (bits & bj) && ds[i][j] > 0) { int d = dp[bits][i] + ds[i][j]; setmax(dp[bits | bj][j], d); setmax(maxd, d); } printf("%d\n", maxd); return 0; }