Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define fi first
- #define se second
- #define pb push_back
- #define pf push_front
- #define popb pop_back
- #define popf pop_front
- #define ins insert
- #define pq priority_queue
- #define minele min_element
- #define maxele max_element
- #define mp make_pair
- #define lb lower_bound //first pos >= val
- #define ub upper_bound // first pos > val
- #define cnt_bit __builtin_popcount
- #define all(x) x.begin(), x.end()
- #define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
- //#pragma GCC optimize("Ofast")
- //#pragma GCC target("avx,avx2,fma")
- using namespace std;
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<ll, ll> pll;
- typedef pair<int, int> pii;
- int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1};
- int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1};
- int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1};
- const int INF = 1e9;
- const ll oo = 1e18;
- template<class X, class Y>
- bool minimize(X &x, const Y &y) {
- if (x > y)
- {
- x = y;
- return true;
- }
- return false;
- }
- template<class X, class Y>
- bool maximize(X &x, const Y &y) {
- if (x < y)
- {
- x = y;
- return true;
- }
- return false;
- }
- /* Author : Le Ngoc Bao Anh, 11A5, LQD High School for Gifted Student */
- map<string, int> id;
- const int N = 1e5 + 10;
- string name[N];
- bool spec[N];
- int dp[N];
- vector<int> g[N];
- void solve() {
- int n, k, s, m; cin >> n >> k >> s >> m;
- int cnt = 0;
- vector<string> ans;
- for(int i = 1; i <= s; i++) {
- string s; cin >> s;
- if(!id[s]) {
- id[s] = ++cnt;
- name[cnt] = s;
- ans.pb(s);
- }
- spec[id[s]] = true;
- }
- for(int i = 1; i <= m; i++) {
- string x, y;
- cin >> x >> y;
- if(!id[x]) {
- id[x] = ++cnt;
- name[cnt] = x;
- }
- if(!id[y]) {
- id[y] = ++cnt;
- name[cnt] = y;
- }
- int u = id[x], v = id[y];
- g[u].pb(v); g[v].pb(u);
- }
- for(int i = 1; i <= n; i++) {
- sort(all(g[i]));
- g[i].resize(unique(all(g[i])) - g[i].begin());
- }
- queue<int> q;
- for(int i = 1; i <= n; i++) if(spec[i]) q.push(i);
- while(!q.empty()) {
- int u = q.front(); q.pop();
- for(auto v : g[u]) {
- if(spec[v]) continue;
- ++dp[v];
- if(dp[v] >= k) {
- spec[v] = true;
- ans.pb(name[v]);
- q.push(v);
- }
- }
- }
- sort(all(ans));
- cout << ans.size() << '\n';
- for(int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
- }
- int main()
- {
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #else
- //online
- #endif
- int tc = 1, ddd = 0;
- // cin >> tc;
- while(tc--) {
- //ddd++;
- //cout << "Case #" << ddd << ": ";
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement