hdu 4460 Friend Chains (图最长路的最小值-BFS)
写完提交答案错了,后面发现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; }
合集:
BFS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)