hdu 4460 Friend Chains (图最长路的最小值-BFS)

Problem - 4460 (hdu.edu.cn)

写完提交答案错了,后面发现vis初始化的地方错了,以前BFS都只调用一次,看来我中毒太深。这个题更能体现BFS的特性,增加dis数组记录距离。

复制代码
#include<iostream> 
#include<queue>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
const int N=10010;
const int INF=0x3f3f3f3f;
int n,m,ans,dis[N][N],vis[N];
string n1,n2,n3;
map<string,int> mp;
vector<int> G[N];
queue<int> q;
void BFS(int x){
    memset(vis,0,sizeof(vis));
    dis[x][x]=0;
    vis[x]=1;
    q.push(x);
    while(!q.empty()){
        int mate1=q.front();
        q.pop();
        int number=G[mate1].size();
        for(int i=0;i<number;i++){
            int mate2=G[mate1][i];
            if(vis[mate2]) continue;
            dis[x][mate2]=dis[x][mate1]+1;
            vis[mate2]=1;
            q.push(mate2);
        }
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    while(cin>>n){
        if(!n) return 0;
        mp.clear();
        for(int i=0;i<n;i++){
            cin>>n1;
            mp[n1]=i;
        }
        for(int i=0;i<n;i++){
            dis[i][i]=0;
            for(int j=i+1;j<n;j++) dis[i][j]=dis[j][i]=INF;
        }
        for(int i=0;i<n;i++) G[i].clear();
        cin>>m;
        for(int i=0;i<m;i++){
            cin>>n2>>n3;
            int t1=mp[n2];
            int t2=mp[n3];
            G[t1].push_back(t2);
            G[t2].push_back(t1);
        }
        for(int i=0;i<n;i++) BFS(i);
        ans=0;
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++) ans=max(ans,dis[i][j]);
        }
        if(ans==INF) cout<<"-1"<<endl;
        else cout<<ans<<endl;
    }
    return 0;
}
复制代码

 

posted @   ACCbulb  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示