社区讨论

floyd大暴力哇,求助

P2176[USACO11DEC] RoadBlock S / [USACO14FEB] Roadblock G/S参与者 8已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@mi7wa4j9
此快照首次捕获于
2025/11/21 04:39
4 个月前
此快照最后确认于
2025/11/21 06:32
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N=1e2+5;
int n,m,i,j,k,x,y,z,kk,ans=-100000000;
int a[N][N],b[N],aa[N][N],f[N][N];

int main(){
memset(a,127/3,sizeof(a));
scanf("%d%d",&n,&m);
for (i=1; i<=m; i++)
{
scanf("%d%d%d",&x,&y,&z);
a[x][y]=min(a[x][y],z);
a[y][x]=min(a[y][x],z);
}
for (i=1; i<=n; i++) for (j=1; j<=n; j++) aa[i][j]=a[i][j];
for (i=1; i<=n; i++) a[i][i]=0;
for (k=1; k<=n; k++)
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
if (i!=j && i!=k && j!=k) a[i][j]=min(a[i][j],a[i][k]+a[k][j]);	
	
k=0;
for (i=1; i<=n; i++)
if (a[1][i]+a[i][n]==a[1][n])
k++,b[k]=i;
//printf("%d\n",a[1][n]); for (i=1; i<=k; i++) printf("%d ",b[i]);
for (kk=1; kk<=k-1; kk++)
{
for (i=1; i<=n; i++) for (j=1; j<=n; j++) f[i][j]=aa[i][j];	
f[b[kk]][b[kk+1]]=f[b[kk+1]][b[kk]]=aa[b[kk]][b[kk+1]]*2;
for (k=1; k<=n; k++)
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
if (i!=j && i!=k && j!=k) f[i][j]=min(f[i][j],f[i][k]+f[k][j]);	
ans=max(ans,f[1][n]-a[1][n]);	
}

printf("%d\n",ans);
return 0;	
}

回复

11 条回复,欢迎继续交流。

正在加载回复...