/**
- struct Point {
- int x;
- int y;
- Point(int xx, int yy) : x(xx), y(yy) {}
- };
- /
class Solution {
public:
/**- 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
- 能回到1号点返回 Yes,否则返回 No
- @param param int整型vector param[0] 为 n,param[1] 为 m
- @param edge Point类vector Point.x , Point.y 分别为一条边的两个点
- @return string字符串
- /
struct hashFunc {
size_t operator()(const pair<int,int> &o) const {return hash<int>()(o.first)^hash<int>()(o.second);
}
};
vector<vector<int>> AL;
unordered_set<pair<int,int>,hashFunc> vis;
bool ans;
int counter;
void dfs(int u) {
if (ans) return;
int a,b;
for (const auto &v : AL[u]) {a = u; b = v; if (a>b) swap(a,b); if (vis.find({a,b}) == vis.end()) { if (a == 1 || b == 1) { ++counter; if (counter > 1) { ans = true; return; } } vis.insert({a,b}); dfs(v); }
}
}
string solve(vector<int>& param, vector<point>& edge) {
// write code here
int n = param[0];
vector<vector<int>>().swap(AL);
AL.resize(n+1);
vis.clear();
for (const auto &i : edge) {AL[i.x].emplace_back(i.y); AL[i.y].emplace_back(i.x);
}
ans = false;
counter = 0;
dfs(1);
return ans ? "Yes" : "No";
}
};</int></point></int></int>