How ABC E?
  • 板块题目总版
  • 楼主_Z_F_R_
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/6/10 21:49
  • 上次更新2023/10/23 13:25:57
查看原帖
How ABC E?
911417
_Z_F_R_楼主2023/6/10 21:49

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;
}

提交记录

2023/6/10 21:49
加载中...