Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Trần Việt Anh - 8/11/2019 - 11:15PM
- #include<iostream>
- #include<map>
- #include<vector>
- #include <queue>
- #include <set>
- using namespace std;
- int main() {
- int lineCount;
- priority_queue<int> vertex;
- map<int, vector<int> > tree;
- map<int, int> vertexCount;
- set<int> nodeSet;
- cin >> lineCount;
- for (int i = 0; i < lineCount; i++) {
- int x, y; cin >> x >> y;
- nodeSet.insert(x); nodeSet.insert(y);
- map<int, int>::iterator it = vertexCount.find(x);
- if (it == vertexCount.end()) {
- //cout << "new " << x << endl;
- vertex.push(-x);
- vertexCount[x] = 1;
- vector<int> values(1, y);
- tree[x] = values;
- }
- else {
- vertexCount[x] += 1;
- tree[x].push_back(y);
- }
- it = vertexCount.find(y);
- if (it == vertexCount.end()) {
- //cout << "new " << y << endl;
- vertex.push(-y);
- vertexCount[y] = 1;
- vector<int> values(1, x);
- tree[y] = values;
- }
- else {
- vertexCount[y] += 1;
- tree[y].push_back(x);
- }
- }
- int n = nodeSet.size();
- vector<int> sortedVertex(0);
- while (vertex.size() != 0) {
- sortedVertex.push_back(-vertex.top());
- vertex.pop();
- }
- // for (int i = 0; i < sortedVertex.size(); i++) {
- // cout << sortedVertex[i] << " ";
- // }
- // cout << endl;
- // for (int i = 0; i < sortedVertex.size(); i++) {
- // cout << "Node Value: " << sortedVertex[i] << endl;
- // cout << "Count: " << vertexCount[sortedVertex[i]] << endl;
- // cout << "Size: " << tree[sortedVertex[i]].size() << endl;
- // for (int j = 0; j < tree[sortedVertex[i]].size(); j++)
- // cout << tree[sortedVertex[i]][j] << "-";
- // cout << endl;
- // }
- bool checked[sortedVertex.size()];
- for (int i = 0; i < sortedVertex.size(); i++)
- checked[i] = false;
- for (int i = 0; i < n - 2; i++) {
- for (int nodeIndex = 0; nodeIndex < sortedVertex.size(); nodeIndex++) {
- if (!checked[nodeIndex]) {
- checked[nodeIndex] = true;
- bool valid = true;
- for (int j = 0; j < tree[sortedVertex[nodeIndex]].size(); j++)
- if (vertexCount[tree[sortedVertex[nodeIndex]][j]] == 1) {
- valid = false;
- break;
- }
- if (valid) {
- int connectedVertex = *tree[sortedVertex[nodeIndex]].begin();
- cout << connectedVertex << " ";
- vertexCount[connectedVertex]--;
- for (int ind = 0; ind < tree[connectedVertex].size(); ind ++)
- if (tree[connectedVertex][ind] == sortedVertex[nodeIndex]) {
- tree[connectedVertex].erase(tree[connectedVertex].begin() + ind);
- break;
- }
- }
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement