#include <bits/stdc++.h>
using namespace std;
int n,m,x,y;
vector<int>t[100005];
unsigned long long fz[100005];
unsigned long long fm[100005];
int rd[100005];
unsigned long long ffz,ffm;
unsigned long long cj;
queue<int>q;
int s;
bool f[100005];
unsigned long long e,w;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)fm[i]=1;
for(int i=1;i<=n;i++){
cin>>x;
if(x==0)f[i]=1;
for(int j=1;j<=x;j++){
cin>>y;
rd[y]++;
t[i].push_back(y);
}
}
for(int i=1;i<=m;i++)fz[i]=1;
for(int i=1;i<=n;i++)
if(rd[i]==0)q.push(i);
while(!q.empty()){
s=q.front();
q.pop();
ffz=fz[s];
ffm=fm[s]*t[s].size();
for(int i=0;i<t[s].size();i++){
e=fz[t[s][i]];
w=fm[t[s][i]];
cj=w/__gcd(ffm,w);
cj*=ffm;
e*=cj/w;
e+=ffz*cj/ffm;
w=cj;
cj=__gcd(e,w);
e/=cj;
w/=cj;
fz[t[s][i]]=e;
fm[t[s][i]]=w;
rd[t[s][i]]--;
if(rd[t[s][i]]==0)q.push(t[s][i]);
}
}
for(int i=1;i<=n;i++){
if(f[i]){
cout<<fz[i]<<" "<<fm[i];
cout<<endl;
}
}
return 0;
}```
的确是加一次约一次,求lcm的时候也是先除后乘的()