305 E WA 求助
  • 板块学术版
  • 楼主SilverLi
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/6/10 23:27
  • 上次更新2023/10/23 13:25:11
查看原帖
305 E WA 求助
688783
SilverLi楼主2023/6/10 23:27
#include <iostream>
#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);
	}
	while (k--) {
		int u, w;
		cin >> u >> w;
		ans.push_back(u);
		dis[u] = w;
		q.push(mk(u, w));
	}
	memset(dis, -1, sizeof(dis));
	while (!q.empty()) {
		int v = q.top().v;
		q.pop();
		vis[v] = 1;
		for (int i : g[v])
			if (dis[i] < dis[v] - 1) {
				dis[i] = dis[v] - 1;
				if (!vis[i])	q.push(mk(i, dis[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;
}
2023/6/10 23:27
加载中...