0-2021的最小公倍数开ll
最短路,直接用最暴力的算了,其他的不熟悉考试怕写不出来
在dev跑
#include <bits/stdc++.h>
#define M 1e18
#define n 2021
using namespace std;
//define m 不为0x3f因为这是int的无穷大,而m是ll的无穷大
typedef long long ll;
ll ed[2022][2022];
void P(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++){
ed[i][j]=min(ed[i][j],ed[i][k]+ed[k][j]);
}
}
int main(){
//入ed[][]
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(i==j) ed[i][j]==0;
else if(abs(i-j)<=21) ed[i][j]=i*j/__gcd(i,j);//abs(i-j)而非abs(i,j)
else ed[i][j]=M;
}
P();
cout<<ed[1][2021];
return 0;
}
图论笔记:
dij算法见图论文件夹