#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define rep(i,n) for(int i=0; i pi; typedef pair pl; typedef pair plc; typedef pair pss; int n, m; int dp[(1 << 15)]; bool contain(int mask, int pos) { if ((mask & (1 << pos)) != 0)return true; return false; } int main() { cin >> n >> m; vector v(m); vector score(m); rep(i, m) cin >> v[i].first >> v[i].second >> score[i]; rep(i, (1 << 15))dp[i] = 0; for (int mask = 1; mask < (1 << n); mask++) { for (int i = 0; i < n; i++) { if (contain(mask, i)) { int sum = 0; for (int j = 0; j < m; j++) { if (v[j].second == i && contain(mask, v[j].first)) { sum += score[j]; } dp[mask] = max(dp[mask], dp[mask ^ (1 << i)] + sum); } } } } cout << dp[(1 << n) - 1] << endl; return 0; }