类似拓扑排序,只不过入队条件更改一下。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
const int N = 1e6 + 10;
int a[N];
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int c, p, x, l;
cin >> c >> p >> x >> l;
vector<vector<int>> edge(c + 1);
vector<bool> st(c + 1);
vector<int> d(c + 1);
while (p--)
{
int u, v;
cin >> u >> v;
edge[u].push_back(v);
edge[v].push_back(u);
d[u]++;
d[v]++;
}
auto bfs = [&](int s)
{
queue<int> q;
q.push(s);
st[s] = true;
while (q.size())
{
auto t = q.front();
q.pop();
for (auto it : edge[t])
{
if (st[it ])
continue;
if (--d[it] <= (edge[it].size()) / 2)
{
st[it] = true;
q.push(it);
}
}
}
};
bfs(l);
if (st[x])
cout << "leave" << endl;
else
cout << "stay" << endl;
return 0;
}