Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- #include <fstream>
- using namespace std;
- vector<bool> used;
- vector<int> weight;
- vector < vector<int> > g;
- void dfs_visit(int v, int p);
- void dfs(int n) {
- for (int j = 0; j <= 1; ++j)
- {
- used.assign(n, false);
- for (int i = 0; i < n; ++i)
- if (!used[i])
- dfs_visit(0, 0);
- }
- }
- void dfs_visit(int v, int p) {
- used[v] = true;
- auto r = g[v];
- int sz = r.size();
- for (int i = 0; i < sz; ++i){
- if (!used[r[i]])
- dfs_visit(r[i], v);
- if (weight[r[i]] < weight[v])
- weight[v] = weight[r[i]];
- }
- }
- void init(int & n) {
- ifstream ifs("input.txt");
- ifs >> n;
- g = vector < vector<int> >(n);
- weight = vector<int>(n);
- for (int i = 0; i < n; ++i)
- ifs >> weight[i];
- // инициализация
- for (int i = 0; i < n; ++i){
- int sz;
- ifs >> sz;
- g[i] = vector<int>(sz);
- for (int j = 0; j< sz; ++j)
- ifs >> g[i][j];
- }
- }
- int main() {
- int n;
- init(n);
- dfs(n);
- for (auto x : weight)
- cout << x << ' ';
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement