80分求救,调了好几次了,第三个点和第四个点WA
  • 板块P1613 跑路
  • 楼主赤坂时寞
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/28 10:39
  • 上次更新2023/11/4 13:04:50
查看原帖
80分求救,调了好几次了,第三个点和第四个点WA
148104
赤坂时寞楼主2021/7/28 10:39

用了floyd,倍增算法,看数据挺小的,直接用矩阵存图

#include<bits/stdc++.h>
using namespace std;
const int M=100;
int dis[M][M],m,n;
int AK[M][M][20]; 
void div(){
for(int k=1;k<=20;k++)
for(int i=1;i<=n;i++)
for(int t=1;t<=n;t++)
for(int j=1;j<=n;j++)
if(AK[i][t][k-1]&&AK[t][j][k-1]){
   AK[i][j][k]=1;
   dis[i][j]=1;
 }
}
void floyd(){
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[j][k]);
}
int main(){
	memset(AK,0,sizeof(AK));
   memset(dis,10,sizeof(dis));
   scanf("%d%d",&n,&m);
   for(int i=1;i<=m;i++)
   {
       int x,y;
       scanf("%d%d",&x,&y);
       dis[x][y]=1;
       AK[x][y][0]=true;
   }
   div();
   floyd();
   printf("%d",dis[1][n]);
	return 0;
}
2021/7/28 10:39
加载中...