社区讨论

20分求助

P5908猫猫和企鹅参与者 4已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@lodavxvr
此快照首次捕获于
2023/10/31 03:36
2 年前
此快照最后确认于
2023/11/05 13:59
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int inf=0x7fffffff;
struct no
{
    int to,w,next;
}e[200005];
priority_queue<pair<int,int> >q;
int dist[100005],head[100005];
int n,d,cnt=0,ans=0;
bool vis[100005];
void add(int u,int v,int w)
{
    e[++cnt]=(no){v,w,head[u]};
    head[u]=cnt;
}
void dij(int s)
{
    for(int i=1;i<=n;i++)
    {
        if(i==s)
        {
            dist[i]=0;
        }
        else
        {
            dist[i]=inf;
        }
    }
    q.push(make_pair(-dist[s],s));
    while(!q.empty())
    {
        int dis=q.top().first,x=q.top().second;
        q.pop();
        if(vis[x]) 
        {
            continue;
        }
        vis[x]=true;
        if(dis>dist[x]) 
        {
            continue;
        }
        for(int i=head[x]; i; i=e[i].next)
        {
            int y=e[i].to,w=e[i].w;
            if(!vis[y]&&dist[y]>dist[x]+w)
            {
                dist[y]=dist[x]+w;
                q.push(make_pair(-dist[y],y));
            }
        }
    }
}
int main()
{
    scanf("%d%d",&n,&d); 
    for(int i=1;i<=n-1;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        add(u,v,1);
        add(v,u,1);
    }
    dij(1);
    for(int i=1;i<=n;i++)
    {
        if(dist[i]<d)
        {
            ans++;
        }
    }
    printf("%d",ans);
    return 0;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...