记录编号 |
92701 |
评测结果 |
AAAAAAAAAA |
题目名称 |
考验 |
最终得分 |
100 |
用户昵称 |
雪狼 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.015 s |
提交时间 |
2014-03-22 10:32:51 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#define REP(i,a,b) for(int i=a;i!=b+1;++i)
#define CLR(c,x) memset(c,x,sizeof(c))
#define maxn 30+10
#define INF ~0U>>2
using namespace std;
typedef long long LL;
void setIO(string s){
string in=s+".in",out=s+".out";
freopen(in.c_str(),"r",stdin);
freopen(out.c_str(),"w",stdout);
}
struct edge{
int from,to,dis;
};
int n,t;
LL ans;
vector<edge>E;
vector<int>G[maxn];
bool vis[maxn];
void addedge(int from,int to,int dis){
//cout<<from<<' '<<to<<' '<<dis<<endl;
E.push_back((edge){from,to,dis});
G[from].push_back(E.size()-1);
}
void read(){
scanf("%d",&n);
//init_edge
E.clear();
REP(i,1,n)G[i].clear();
REP(i,1,n)REP(j,1,n){
scanf("%d",&t);
if(t)addedge(i,j,t);
}
}
LL GCD(LL a,LL b){return b==0?a:GCD(b,a%b);}
LL LCM(LL a,LL b){return a*b/GCD(b,a);}
void DFS(int x,LL a){
if(ans%a==0)return; //powerful_treecut
if(x==2){
ans=LCM(ans,a);
return;
}
REP(i,0,G[x].size()-1){
edge &e=E[G[x][i]];
if(!vis[e.to]){
vis[e.to]=1;
DFS(e.to,GCD(a,e.dis));
vis[e.to]=0;
}
}
}
void work(){
CLR(vis,0);vis[1]=1;ans=1;
REP(i,0,G[1].size()-1)DFS(E[G[1][i]].to,E[G[1][i]].dis);
printf("%lld",ans);
}
int main(){
setIO("testz");
read();
work();
}