RT,信奥题库好好的。
#include<bits/stdc++.h>
using namespace std;
unsigned long long n,m,ta[100001],tb[100001],a[100001],k[100001];
unsigned long long gcd(unsigned long long x,unsigned long long y){
unsigned long long minn=min(x,y),gys=1;
for(unsigned long long i=minn;i>=2;i--){
if(y%i==0&&x%i==0){
gys=i;
break;
}
}
return gys;
}
int main(){
// freopen("water.in","r",stdin);
// freopen("water.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>m;
for(unsigned long long i=1;i<=m;i++){
ta[i]=1,tb[i]=1;
}
for(unsigned long long i=1;i<=n;i++){
cin>>a[i];
if(a[i]==0){
k[i]=1;
continue;
}
for(unsigned long long j=1;j<=a[i];j++){
unsigned long long b;
cin>>b;
if(ta[b]!=0&&tb[i]!=0){
unsigned long long x=ta[b],y=tb[b],xx=ta[i],yy=a[i]*tb[i];
unsigned long long gbs=y*yy/gcd(y,yy);
x=gbs/yy*xx+gbs/y*x;
y=gbs;
long long z=x;
x/=gcd(x,y);
y/=gcd(z,y);
ta[b]=x,tb[b]=y;
}else{
ta[b]=ta[i],tb[b]=a[i]*tb[i];
long long z=ta[b];
ta[b]/=gcd(ta[b],tb[b]);
tb[b]/=gcd(z,tb[b]);
}
}
}
for(unsigned long long i=1;i<=n;i++){
if(k[i]){
unsigned long long z=ta[i];
ta[i]/=gcd(ta[i],tb[i]);
tb[i]/=gcd(z,tb[i]);
cout<<ta[i]<<" "<<tb[i]<<endl;
}
}
return 0;
}