比赛 20140321 评测结果 AAAWAAAAWA
题目名称 考验 最终得分 80
用户昵称 雪狼 运行时间 0.010 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2014-03-21 20:24:31
显示代码纯文本
#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;

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,ans;
vector<edge>E;
vector<int>G[maxn];
vector<int>T;
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);
	}
}

int GCD(int a,int b){return b==0?a:GCD(b,a%b);}
int LCM(int a,int b){return a*b/GCD(b,a);}

void DFS(int x,int 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("%d",ans);
}

int main(){
	
	setIO("testz");
	
	read();
	work();
}