社区讨论
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 条回复,欢迎继续交流。
正在加载回复...