rt,求调。
#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int cnt,edge[2 * N],nex[2 * N],head[N];
void add(int u,int v)
{
cnt++;
edge[cnt] = v;
nex[cnt] = head[u];
head[u] = cnt;
}
int n,m,k;
struct Guard
{
int p,h;
}a[N];
struct tNode
{
int pos,dis;
};
int guarded[N];
bool b[N];
void Bfs(int pos,int dis)
{
tNode first = {pos,dis};
queue<tNode>q;
q.push(first);
while(!q.empty())
{
tNode top = q.front();
q.pop();
b[top.pos] = true;
if(guarded[top.pos] >= top.dis || top.dis <= 0)
continue;
//cout << top.pos << ' ' << top.dis << endl;
guarded[top.pos] = top.dis;
int i;
for(i = head[top.pos];i != -1;i = nex[i])
{
int to = edge[i];
if(!guarded[to])
q.push({to,top.dis - 1});
}
}
}
int main()
{
int i;
scanf("%d %d %d",&n,&m,&k);
memset(head,-1,sizeof(head)),memset(b,0,sizeof(b));
for(i = 1;i <= m;i++)
{
int u,v;
scanf("%d %d",&u,&v);
add(u,v),add(v,u);
}
for(i = 1;i <= k;i++)
scanf("%d %d",&a[i].p,&a[i].h);
//out();
for(i = 1;i <= k;i++)
Bfs(a[i].p,a[i].h);
int ans = 0;
for(i = 1;i <= n;i++)
if(b[i])
ans++;
printf("%d\n",ans);
for(i = 1;i <= n;i++)
if(b[i])
printf("%d ",i);
cout << endl;
}