help!!!60分求助!!!
查看原帖
help!!!60分求助!!!
663693
chenjieyang楼主2023/1/2 17:52
//P1144 最短路计数
#include<queue>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e6+10,M=2e6+10;
ll n,m,a[N],b[N];
bool u[N];
vector<ll>p[N];
struct stu{
    ll x,cost;
    stu(ll ax=0,ll ay=0){
        x=ax;
        cost=ay;
    }
};
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        ll x,y;
        cin>>x>>y;
        p[x].push_back(y);
        p[y].push_back(x);
    }
    a[1]=1;
    queue<stu>q;
    q.push(stu(1,0));
    u[1]=1;
    while(!q.empty()){
        stu node=q.front();
        ll x=node.x,cost=node.cost;
        if(!b[x])b[x]=cost;
        q.pop();
        for(int i=0;i<p[x].size();i++){
            if(u[p[x][i]]==0){
                u[p[x][i]]=1;
                q.push(stu(p[x][i],cost+1));
            }
        }
        for(int i=0;i<p[x].size();i++){
            if(b[p[x][i]]==cost-1){
                a[x]+=a[p[x][i]];
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout<<a[i]<<endl;
    }
    return 0;
}
2023/1/2 17:52
加载中...