P8794 [蓝桥杯 2022 国 A] 环境治理 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <iostream>
using namespace std;
#define ll long long
const int N=150;
const int inf=0x7fffffff;
int n,q;
int d[N][N],l[N][N];
int t[N][N];
void floyd()
{
for(int k=0;k<n;k++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
t[i][j]=min(t[i][j],t[i][k]+t[k][j]);
}
}
}
}
bool check(int mid)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
t[i][j]=d[i][j];//临时数组
for(int i=0;i<n;i++)
{
int x=mid/n;//x为mid天灰尘度下降的数值
if(mid%n>=i+1)//如果治理的天数到第i号城市
x++;
for(int j=0;j<n;j++)
{
t[i][j]=max(t[i][j]-x*2,l[i][j]);
//治理的城市,与他相连的路都要减少,所以要减去x*2.
}
}
floyd();//求灰尘度最小的路
int res=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
res+=t[i][j];
}
}
if(res>q)
return false;
else
return true;
}
int main()
{
cin>>n>>q;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>d[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>l[i][j];
int i=0,j=1e9,ans=-1;
while(i<j)//二分所需的天数
{
int mid=(i+j)/2;
if(check(mid))
j=mid,ans=j;//如果永远不满足,则check()永远不会为true
else
i=mid+1;
}
cout<<ans;
return 0;
}
标签:return,int,P8794,long,蓝桥,2022,const
From: https://blog.csdn.net/2302_77047789/article/details/137473727