Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <cstdio>
- #include <cstring>
- #include <ctime>
- #include <cmath>
- #include <cctype>
- #include <vector>
- #include <string>
- #include <queue>
- #include <stack>
- #include <set>
- #include <map>
- #include <iterator>
- #include <functional>
- #include <cassert>
- #include <algorithm>
- typedef long long LL;
- typedef long double LD;
- using namespace std;
- int n;
- vector <pair <int, pair <int, int> > > e;
- vector <vector <int> > g;
- vector <int> deg;
- int main()
- {
- freopen("g.in", "r", stdin);
- freopen("g.out", "w", stdout);
- scanf("%d", &n);
- for (int i = 0; i < n; ++i)
- for (int j = 0; j < n; ++j)
- {
- int len;
- scanf("%d", &len);
- if (len != -1)
- e.push_back(make_pair(len, make_pair(i, j)));
- }
- sort(e.begin(), e.end(), greater <pair <int, pair <int, int> > > ());
- deg.assign(n, 0);
- int cnt = 0;
- vector <pair <int, int> > ans;
- for (size_t i = 0; i < e.size(); ++i)
- if (deg[e[i].second.first] + deg[e[i].second.second] < 2 || cnt == n - 1 && max(deg[e[i].second.first], deg[e[i].second.second]) == 1)
- {
- ++deg[e[i].second.first];
- ++deg[e[i].second.second];
- ans.push_back(make_pair(e[i].second.first, e[i].second.second));
- ++cnt;
- }
- #ifdef DEBUG
- for (size_t i = 0; i < ans.size(); ++i)
- cerr << ans[i].first << ' ' << ans[i].second << '\n';
- #endif
- g.resize(n);
- for (size_t i = 0; i < ans.size(); ++i)
- {
- g[ans[i].first].push_back(ans[i].second);
- g[ans[i].second].push_back(ans[i].first);
- }
- #ifdef DEBUG
- cerr << endl;
- for (int i = 0 ; i < n; ++i)
- {
- for (int j = 0; j < g[i].size(); ++j)
- cerr << g[i][j] << ' ';
- cerr << endl;
- }
- #endif
- vector <char> act(n, 0);
- int cur = 0;
- for (int i = 0; i < n; ++i)
- {
- act[cur] = 1;
- #ifdef DEBUG
- cerr << "iter " << i << ' ';
- for (int i = 0; i < n; ++i)
- cerr << (int)act[i] << ' ';
- cerr << endl;
- #endif
- printf("%d ", cur + 1);
- for (size_t j = 0; j < g[cur].size(); ++j)
- if (!act[g[cur][j]])
- {
- cur = g[cur][j];
- break;
- }
- }
- printf("1\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement