egogoboy

Пересылка файлов

Oct 24th, 2022
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<queue>
  6. #define all(container) container.begin(), container.end()
  7. #define fors(counter, start, finish) for (int counter = start; counter < finish; ++counter)
  8. #define forb(counter, start, finish) for (int counter = start; counter >= finish; --counter)
  9. #define vec(type) std::vector<type>
  10. #define dvec(type) std::vector<std::vector<type>>
  11. #define cout(val) std::cout << val << std::endl;
  12.  
  13. struct town {
  14.     int t;
  15.     int num;
  16. };
  17. int n, m, tim, ans = 1000000, c = 1;
  18. dvec(town) map;
  19. vec(int) road;
  20. vec(bool) edge(22, false);
  21. vec(int) count(22, 0);
  22.  
  23. void check(vec(int)& temp, vec(bool)& done) {
  24.     bool f = true;
  25.     fors(i, 0, done.size()) {
  26.         if (!done[i]) {
  27.             f = false;
  28.             break;
  29.         }
  30.     }
  31.     if (f && ans > tim) {
  32.         ans = tim;
  33.         road = {};
  34.         fors(i, 0, m) {
  35.             if (edge[i])
  36.                 road.push_back(i);
  37.         }
  38.     }
  39. }
  40.  
  41. void dfs(vec(int)& temp, int v, vec(bool)& done) {
  42.     done[v] = true;
  43.     fors(i, 0, map[v].size()) {
  44.         if (!done[map[v][i].t] && edge[map[v][i].num]) {
  45.             dfs(temp, map[v][i].t, done);
  46.         }
  47.     }
  48.     check(temp, done);
  49. }
  50.  
  51. void rec(int d) {
  52.     if (d < m) {
  53.         fors(i, d + 1, m) {
  54.             edge[i] = true; c++;
  55.             tim += count[i];
  56.             if (c == n) {
  57.                 vec(int) temp; vec(bool) done(n, false);
  58.                 dfs(temp, 0, done);
  59.             }
  60.             rec(i);
  61.             edge[i] = false; c--;
  62.             tim -= count[i];
  63.         }
  64.     }
  65. }
  66.  
  67. int main() {
  68.     std::ifstream fin("input.txt");
  69.  
  70.     fin >> n >> m;
  71.     map.resize(n);
  72.     fors(i, 0, m) {
  73.         int u, c;
  74.         town temp;
  75.         fin >> u >> temp.t >> c;
  76.         temp.t--; u--;
  77.         temp.num = i;
  78.         count[i] = c;
  79.         map[u].push_back(temp);
  80.     }
  81.  
  82.     rec(-1);
  83.  
  84.     if (ans == 1000000) {
  85.         ans = 0;
  86.     }
  87.     std::cout << ans << " " << road.size() << std::endl;
  88.     fors(i, 0, road.size()) {
  89.         std::cout << road[i] + 1 << " ";
  90.     }
  91.  
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment