传送门WA80





#include<bits/stdc++.h>
using namespace std;
#define int long long
int dp[105][105],dp1[105][105];
int n,m,k,l,r=1e11;
bool check(int x)
{
	memset(dp1,0x3f,sizeof(dp1));
	for(int i=1;i<=n;++i) dp1[i][i]=0;
	for(int i=1;i<=n;++i)
	for(int j=1;j<=n;++j)
	if(dp[i][j]<=x) dp1[i][j]=1;
	for(int i=1;i<=n;++i)
	for(int j=1;j<=n;++j)
	if(i!=j)
	for(int k=1;k<=n;++k)
	if(i!=k&&j!=k) dp1[j][k]=min(dp1[j][k],dp1[j][i]+dp1[i][k]);
	for(int i=1;i<=n;++i)
	if(dp1[1][i]>k) return 0;
	return 1;
}
signed main()
{
	freopen("portal.in","r",stdin);
	freopen("portal.out","w",stdout);
	cin>>n>>m>>k;
	memset(dp,0x3f,sizeof(dp));
	for(int i=1;i<=n;++i) dp[i][i]=0; 
	for(int i=1;i<=m;++i)
	{
		int x,y,dist;
		cin>>x>>y>>dist;
		dp[x][y]=dist;
		dp[y][x]=dist;
	}
	for(int i=1;i<=n;++i)
	for(int j=1;j<=n;++j)
	if(i!=j)
	for(int k=1;k<=n;++k)
	if(i!=k&&j!=k) dp[j][k]=min(dp[j][k],dp[j][i]+dp[i][k]);
	while(l<r)
	{
		int mid=(l+r)/2;
		if(check(mid)) r=mid;
		else l=mid+1;
	}
	cout<<r;
	return 0;
}

有人吗


但我不会

已解决。
题目理解有误,是两两之间可到。