305 E 求助
  • 板块学术版
  • 楼主SilverLi
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/6/11 21:17
  • 上次更新2023/10/23 13:19:48
查看原帖
305 E 求助
688783
SilverLi楼主2023/6/11 21:17
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
#define int long long
#define pi pair<int,int>
#define mk make_pair
#define w first
#define v second
const int N = 2e5 + 5;
int n, m, k;
int vis[N], dis[N];
vector<int> g[N];
vector<int> ans;
priority_queue<pi,vector<pi>,greater<pi>> q;
signed main() {
    cin >> n >> m >> k;
    while (m--) {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    memset(dis, -1, sizeof(dis));
    while (k--) {
        int u, w;
        cin >> u >> w;
        dis[u] = w;
        q.push(mk(w, u));
    }
    while (!q.empty()) {
        int v = q.top().v;
        q.pop();
        for (int i : g[v])
            if (dis[i] < dis[v] - 1) {
                dis[i] = dis[v] - 1;
                q.push(mk(dis[i], i));
            }
    }
    for (int i = 1; i <= n; ++i)
        if (dis[i] >= 0)	ans.push_back(i);
    cout << ans.size() << '\n';
    for (int i : ans)   cout << i << ' ';
    return 0;
}

TLE 10

2023/6/11 21:17
加载中...