题意:
给出一张图,(无向图)求出所有1->2的路径每条路径上所有边的最大公约数的最小公倍数…
大概就是说对一条1->2的路径,他有一个val代表这条路径上所有边的最大公约数…然后求出来这些所有的最大的最小公倍数…
分析:
遍历所有状态,感觉不是DP就是搜索…
此题数据很水…所以搜索也可以过…但是很明显应该DP…
我们要深刻的理解Floyd才能做出来这道题…其实就是把取min的过程改成求最小公倍数就好了…
代码如下:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
#define int long long
using namespace std;
const int maxn=25+5;
int n,mp[maxn][maxn];
inline int gcd(int x,int y){
return y==0?x:gcd(y,x%y);
}
signed main(void){
scanf("%lld",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%lld",&mp[i][j]);
if(mp[i][j]==0)
mp[i][j]=1;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(mp[i][k]&&mp[k][j])
mp[i][j]=mp[i][j]*gcd(mp[i][k],mp[k][j])/gcd(mp[i][j],gcd(mp[i][k],mp[k][j]));
cout<<mp[1][2]<<endl;
return 0;
}
by >_< NeighThorn