Why?人生是如此大起大落落落落落落落落落落落落
查看原帖
Why?人生是如此大起大落落落落落落落落落落落落
303116
无人星空之地楼主2020/12/6 09:29

OItiku 60 洛谷 10分 请问各位大佬是被什么样的数据卡了啊?感激不尽

看这里

#include <bits/stdc++.h>
using namespace std;
int Jd[1003][1003],n,m,Ca[1003],Zz,Do,Bo,Zs[31]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
long long fzz,fmm;
struct q{
	long long fz,fm;
}Sum[1003];
void dt(long long fxz,long long fxm,int bh){
	if(Ca[bh]==0){
		if(Sum[bh].fm==0&&Sum[bh].fz==0){
			Sum[bh].fm=fxm;
			Sum[bh].fz=fxz;
			return;
		}else{
			fzz=Sum[bh].fm;
			fmm=fxm;
			Sum[bh].fm*=fmm;
			Sum[bh].fz*=fmm;
			fxz*=fzz;
			Sum[bh].fz+=fxz;
			for(int k=0;k<25;k++){
				while(Sum[bh].fz%Zs[k]==0&&Sum[bh].fm%Zs[k]==0){
					Sum[bh].fz/=Zs[k];
					Sum[bh].fm/=Zs[k];
				}
			}
			return;
		}
	}
	for(int k=0;k<25;k++){
		while(fxm%Zs[k]==0&&fxz%Zs[k]==0){
			fxm/=Zs[k];
			fxz/=Zs[k];
		}
	}
	for(int i=1;i<=n;i++){
		if(Jd[bh][i]==1){
			dt(fxz,fxm*Ca[bh],i);
		}
	}
	return;
}
int main()
{
//	freopen("water.in","r",stdin);
//    freopen("water.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>Do;
		Ca[i]=Do;
		for(int j=1;j<=Do;j++){
			cin>>Bo;
			Jd[i][Bo]=1;
		}
	}
	dt(1,1,1);
	for(int i=1;i<=n;i++){
		if(Ca[i]==0){
			for(int j=2;j<=Sum[i].fz;j++){
				if(Sum[i].fz%j==0&&Sum[i].fm%j==0){
					Sum[i].fz/=j;
					Sum[i].fm/=j;
				}
			}
			cout<<Sum[i].fz<<" "<<Sum[i].fm<<endl;
		}
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}
2020/12/6 09:29
加载中...