如题
#include<bits/stdc++.h>
#define ull unsigned long long
#define N 100005
#define dl cout<<"line"<<__LINE__<<endl
#define dbg(x) cout<<#x<<" : "<<(x)<<endl
using namespace std;
int n,m;
vector<int> G[N];
ull q[N],p[N];
int in[N];
bool out[N];
ull gcd(ull a,ull b){
if(b==0)return a;
return gcd(b,a%b);
}
inline ull lcm(ull a,ull b){
return a/gcd(a,b)*b;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
q[i]=0;
p[i]=1;
int x;
cin>>x;
for(int j=0;j<x;j++){
int c;
cin>>c;
G[i].push_back(c);
in[c]++;
}
}
for(int i=1;i<=m;i++)q[i]=1;
vector<int> topo;
queue<int> Q;
for(int i=1;i<=m;i++){
Q.push(i);
}
while(Q.size()){
int u=Q.front();Q.pop();
topo.push_back(u);
for(int i=0;i<G[u].size();i++){
in[G[u][i]]--;
if(in[G[u][i]]==0){
Q.push(G[u][i]);
}
}
}
for(int u=1;u<=n;u++){
if(!G[u].size()){
out[u]=true;
}
for(int i=0;i<G[u].size();i++){
ull lc=lcm(p[G[u][i]],p[u]*G[u].size());
q[G[u][i]]=lc/p[G[u][i]]*q[G[u][i]]+lc/(p[u]*G[u].size())*q[u];
p[G[u][i]]=lc;
}
}
for(int i=1;i<=n;i++){
if(out[i]){
cout<<q[i]/gcd(q[i],p[i])<<" "<<p[i]/gcd(q[i],p[i])<<endl;
}
}
return 0;
}