1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| vector<edge> e[N]; int lenofpath; int tmp_len; int node_num;
void dfs(int src, int num, int n) { if (l == num || src == n - 1) { if (src == n - 1) lenofpath = max(lenofpath, tmp_len); return; } else { for (auto &i : e[src]) { if (tagc[c[i.des]]) continue; if (tagn[src]) continue; tmp_len += d[i.index]; node_num++; tagc[c[i.des]] = 1; tagn[src] = 1; dfs(i.des, num - 1, n); node_num--; tmp_len -= d[i.index]; tagc[c[i.des]] = 0; tagn[src] = 0; } } return; }
|