[Offer收割]编程练习赛19 register

Ended

Participants:405

Verdict:Time Limit Exceeded
Score:60 / 100
Submitted:2017-07-23 14:04:45

Lang:G++

Edit
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
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <unordered_set>
using namespace std;
void constructTree(vector<vector<int> >& edges, int node, int parent, int degree, vector<int>& parents, vector<int>& degrees, vector<int>& visited){
    parents[node] = parent;
    degrees[node] = degree;
    visited[node] = 1;
    for(int i: edges[node]){
        if(visited[i] != 1){
            constructTree(edges, i, node, degree + 1, parents, degrees, visited);
        }
    }
}
unordered_set<int> findPaths(vector<int>& parents, const vector<int>& degrees, int x, int y){
    unordered_set<int> res;
    if(degrees[y] > degrees[x]){
        swap(x, y);
    }
    while(degrees[x] > degrees[y]){
        res.insert(x);
        x = parents[x];
    }
    while(x != y){
        res.insert(x);
        res.insert(y);
        x = parents[x];
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX