求助 P1364 用的是BFS,只有40分
  • 板块学术版
  • 楼主Reunite
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/8/15 01:06
  • 上次更新2023/11/4 10:38:28
查看原帖
求助 P1364 用的是BFS,只有40分
377760
Reunite楼主2021/8/15 01:06

这里我对每个节点进行一次BFS,然后求最小值。

代码:

#include <bits/stdc++.h>
using namespace std;

struct node{
    int pep;
    int s=0;
}a[105];
queue <int> A;
int g[105][105];
bool mp[105];
int n,q,w,e;

void bfs(int id){
    A.push(id);
    mp[id]=1;
    int temp,step=1;
    while(!A.empty()){
        temp=A.front();
        A.pop();
        for(int i=1;i<=n;i++){
            if(g[temp][i]&&mp[i]==0){
                mp[i]=1;
                a[id].s+=step*a[i].pep;
                A.push(i);
            }
        }
        step++;
    }
    return ;
}

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d%d",&a[i].pep,&q,&w);
        if(q) g[q][i]=g[i][q]=1;
        if(w) g[w][i]=g[i][w]=1;
    }
    for(int i=1;i<=n;i++){
        memset(mp,0,sizeof(mp));
        bfs(i);
    }
    int mn=2147483647;
    for(int i=1;i<=n;i++) mn=min(mn,a[i].s);
    printf("%d",mn);

    return 0;
}
2021/8/15 01:06
加载中...