51nod 1366 贫富差距
这题题面挺抽象的,一个人与他所以的朋友的钱不能超过 \(d\),问朋友链上钱最多的人的钱与钱最少的人的钱相差多少,求差距的最大值 。
如果两个人不属于同一个连通块那么差距可以无穷大,好了特殊情况解决了。然后为了使这个差距最大,那么对于每个朋友我们都取 \(d\) 为权值来连一条边,最后跑最短路可以得到最大差距。
因为这题的图很稠密,所以用 floyd(其实因为在 floyd 的例题做到的,所以不想再改了,但其实这数据范围也该这么写)
#include<bits/stdc++.h> using namespace std; const int N=100; const int inf=0x3f3f3f3f; int n,d; int dp[N][N]; int main(){ ios::sync_with_stdio(false); int t; cin>>t; while(t--){ cin>>n>>d; char c; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>c; dp[i][j]=inf; dp[j][i]=inf; dp[i][i]=0; if(c=='Y'){ dp[i][j]=dp[j][i]=d; } } } for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]); } } } int mx=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ mx=max(mx,dp[i][j]); } } if(mx>=inf){ cout<<-1; } else{ cout<<mx; } cout<<"\n"; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY